《装饰模式》

自我理解就是把对象重新装饰了一遍。通过继承同一个基类。而不用添加额外的类了。。。。

上图吧

通过修饰类达到我们想要的效果。修饰类通常初始化了基类。

[cpp]  view plain copy
  1. // Decorator.cpp : 定义控制台应用程序的入口点。  
  2. //************************************************************************/      
  3. /* @filename    Decorator.cpp 
  4. @author       wallwind   
  5. @createtime    2012/10/29 22:42 
  6. @function     命令模式 
  7. @email       wochenglin@qq.com   
  8. */      
  9. /************************************************************************/     
  10.   
  11. #include "stdafx.h"  
  12. #include <iostream>  
  13.   
  14. using namespace std;  
  15.   
  16. class Widget  
  17. {  
  18. public:  
  19.     Widget(){}  
  20.     virtual ~Widget(){}  
  21.   
  22.     virtual void show()=0;  
  23. };  
  24.   
  25. class TextField:public Widget  
  26. {  
  27. public:  
  28.     TextField(int ix,int iy)  
  29.         :x(ix),y(iy)  
  30.     {  
  31.   
  32.     }  
  33.     ~TextField(){}  
  34.   
  35.     void show()  
  36.     {  
  37.         cout<<"x:"<<x<<endl;  
  38.         cout<<"y:"<<y<<endl;  
  39.   
  40.     }  
  41. private:  
  42.     int x;  
  43.     int y;  
  44. };  
  45. class Decorator:public Widget  
  46. {  
  47. public:  
  48.     Decorator(Widget* widget)  
  49.         :m_widget(widget)  
  50.     {}  
  51.     virtual ~Decorator()  
  52.     {  
  53.         delete m_widget;  
  54.     }  
  55.   
  56.     void show()  
  57.     {  
  58.         m_widget->show();  
  59.         cout<<"Decorator:show()"<<endl;  
  60.     }  
  61. private:  
  62.     Widget* m_widget;  
  63. };  
  64.   
  65. class BorderDecorator :public Decorator  
  66. {  
  67. public:  
  68.     BorderDecorator(Widget* widget)  
  69.         :Decorator(widget)  
  70.     {  
  71.   
  72.     }  
  73.     void show()  
  74.     {  
  75.         Decorator::show();  
  76.         cout<<"BorderDecorator:show()"<<endl;  
  77.     }  
  78. };  
  79.   
  80. class ScrollDecorator :public Decorator  
  81. {  
  82. public:  
  83.     ScrollDecorator(Widget* widget)  
  84.         :Decorator(widget)  
  85.     {  
  86.   
  87.     }  
  88.   
  89.     void show()  
  90.     {  
  91.         Decorator::show();  
  92.         cout<<"ScrollDecorator:show()"<<endl;  
  93.     }  
  94. };  
  95.   
  96.   
  97. int _tmain(int argc, _TCHAR* argv[])  
  98. {  
  99.   
  100. Widget* aWidget = new BorderDecorator(  
  101.   new BorderDecorator(  
  102.   new ScrollDecorator(  
  103.   new TextField( 80, 24 ))));</p><p> aWidget->show();
  104.   return 0;  
  105. }  

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值