Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1077192
  • 博文数量: 77
  • 博客积分: 821
  • 博客等级: 军士长
  • 技术积分: 1905
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-23 16:17
个人简介

学校:上海交通大学软件工程 学历:硕士 行业:从事流媒体移动开发 QQ: 412595942 邮箱:yiikai1987910@gmail.com

文章分类

全部博文(77)

文章存档

2016年(4)

2015年(15)

2014年(16)

2013年(12)

2012年(21)

2011年(9)

分类: C/C++

2014-11-12 17:51:21

   装饰器模式:通过使用修饰模式,可以在运行时扩充一个类的功能。
  

直接上代码:

点击(此处)折叠或打开

  1. class person
  2. {
  3. public:
  4.     person(){}
  5.     virtual ~person(){}
  6.     virtual void wear() = 0;
  7. };

  8. class japanPerson : public person{
  9. public:
  10.     japanPerson() :person()
  11.     {

  12.     }
  13.     ~japanPerson()
  14.     {

  15.     }
  16.     void wear()
  17.     {
  18.         printf("japan wear japan cloth\n");
  19.     }
  20. };

  21. class personDecorate : public person
  22. {
  23. public:
  24.     personDecorate(person* tmpPerson) :person()
  25.     {
  26.         m_pPerson = tmpPerson;
  27.     }
  28.     virtual ~personDecorate()
  29.     {

  30.     }
  31.     void wear()
  32.     {
  33.         m_pPerson->wear();
  34.     }
  35. private:
  36.     person *m_pPerson;
  37. };

  38. class wearCHNShoesJapanese : public personDecorate
  39. {
  40. public:
  41.     wearCHNShoesJapanese(person* tmp) :personDecorate(tmp)
  42.     {

  43.     }
  44.     ~wearCHNShoesJapanese()
  45.     {

  46.     }
  47.     void wear()
  48.     {
  49.         personDecorate::wear();
  50.         cjwearHat();
  51.     }
  52.     void cjwearHat()
  53.     {
  54.         printf("japanese wear shoes\n");
  55.     }
  56. };

  57. class wearCHNHatJapanese : public personDecorate
  58. {
  59. public:
  60.     wearCHNHatJapanese(person* tmp) :personDecorate(tmp)
  61.     {

  62.     }
  63.     ~wearCHNHatJapanese()
  64.     {

  65.     }
  66.     void wear()
  67.     {
  68.         personDecorate::wear();
  69.         cjwearHat();
  70.     }
  71.     void cjwearHat()
  72.     {
  73.         printf("japanese wear hat\n");
  74.     }
  75. };

   

点击(此处)折叠或打开

  1. int main()
  2. {
  3.         person *jp = new japanPerson();
  4.     jp->wear();
  5.     jp = new wearCHNShoesJapanese(jp);
  6.     jp->wear();
  7.     jp = new wearCHNHatJapanese(jp);
  8.     jp->wear();

  9. }


从上面的代码可以看出我可以给日本人先穿衣服,然后在让他穿鞋,还可以继续扩展他,真是方便!


阅读(1433) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~