《装饰模式》
来源:互联网 发布:刷机精灵for mac 编辑:程序博客网 时间:2024/05/01 22:04
自我理解就是把对象重新装饰了一遍。通过继承同一个基类。而不用添加额外的类了。。。。
上图吧
通过修饰类达到我们想要的效果。修饰类通常初始化了基类。
- // Decorator.cpp : 定义控制台应用程序的入口点。
- //************************************************************************/
- /* @filename Decorator.cpp
- @author wallwind
- @createtime 2012/10/29 22:42
- @function 命令模式
- @email wochenglin@qq.com
- */
- /************************************************************************/
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- class Widget
- {
- public:
- Widget(){}
- virtual ~Widget(){}
- virtual void show()=0;
- };
- class TextField:public Widget
- {
- public:
- TextField(int ix,int iy)
- :x(ix),y(iy)
- {
- }
- ~TextField(){}
- void show()
- {
- cout<<"x:"<<x<<endl;
- cout<<"y:"<<y<<endl;
- }
- private:
- int x;
- int y;
- };
- class Decorator:public Widget
- {
- public:
- Decorator(Widget* widget)
- :m_widget(widget)
- {}
- virtual ~Decorator()
- {
- delete m_widget;
- }
- void show()
- {
- m_widget->show();
- cout<<"Decorator:show()"<<endl;
- }
- private:
- Widget* m_widget;
- };
- class BorderDecorator :public Decorator
- {
- public:
- BorderDecorator(Widget* widget)
- :Decorator(widget)
- {
- }
- void show()
- {
- Decorator::show();
- cout<<"BorderDecorator:show()"<<endl;
- }
- };
- class ScrollDecorator :public Decorator
- {
- public:
- ScrollDecorator(Widget* widget)
- :Decorator(widget)
- {
- }
- void show()
- {
- Decorator::show();
- cout<<"ScrollDecorator:show()"<<endl;
- }
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- Widget* aWidget = new BorderDecorator(
- new BorderDecorator(
- new ScrollDecorator(
- new TextField( 80, 24 ))));</p><p> aWidget->show();
- return 0;
- }
- 装饰模式-撤销装饰
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 送给各位正在努力的 码农们 工作之后有时间常回家看看
- 也谈屌丝
- 数据结构--哈夫曼树
- 项目小感
- 虽有遗憾,但无后悔
- 《装饰模式》
- 由sencha touch的数据模型想到...
- 爱他,让他来兄弟连,恨他,也让他来兄弟连
- 【捷哥浅谈PHP】第十二弹---NoSQL数据库之MongoDB的CURD操作
- python学习笔记--3
- “兄弟连”向未来看齐
- 我心有猛虎,细嗅蔷薇 下
- easyui-layout中的收缩层无法显示标题问题解决
- 5个月和时间赛跑