fork download
  1. #include <iostream>
  2. using namespace std;
  3. //This is for Aero Learning...
  4. //blog.csdn.net/yuangc
  5.  
  6. class Phone
  7. {
  8. public :
  9. virtual void show() = 0;
  10. };
  11.  
  12. class iPhone:public Phone{
  13. public :
  14. virtual void show()
  15. {
  16. cout<<"iPhone"<<endl;
  17. }
  18. };
  19. class DecoratorPone:public Phone
  20. {
  21. public :
  22. void setBasePhone(Phone* phone)
  23. {
  24. mPhone = phone;
  25. }
  26.  
  27. virtual void show()
  28. {
  29. mPhone->show();
  30. }
  31.  
  32. Phone* mPhone;
  33. };
  34. class PhoneSuit:public DecoratorPone
  35. {
  36. public:
  37. PhoneSuit(Phone* phone)
  38. {
  39. setBasePhone(phone);
  40. }
  41. virtual void show()
  42. {
  43. cout<<"带上套套的";
  44. mPhone->show();
  45. }
  46.  
  47. };
  48.  
  49. class PhoneScreen:public DecoratorPone
  50. {
  51. public:
  52. PhoneScreen(Phone* phone)
  53. {
  54. setBasePhone(phone);
  55. }
  56. virtual void show()
  57. {
  58. cout<<"贴上钢化膜的";
  59. mPhone->show();
  60. }
  61.  
  62. };
  63. int main() {
  64. Phone* myPhone = new iPhone();
  65. cout<<"这是一个";myPhone->show();
  66.  
  67. myPhone = new PhoneSuit(myPhone);
  68. cout<<"这是一个";myPhone->show();
  69.  
  70. myPhone = new PhoneScreen(myPhone);
  71. cout<<"这是一个";myPhone->show();
  72.  
  73. return 0;
  74. }
Success #stdin #stdout 0s 4532KB
stdin
Standard input is empty
stdout
这是一个iPhone
这是一个带上套套的iPhone
这是一个贴上钢化膜的带上套套的iPhone