用代码和UML图化解设计模式之《装饰模式》
这个模式看了两次,因为我有点不太理解,其实到现在也不太理解。
通过写代码,自我理解就是把对象重新装饰了一遍。通过继承同一个基类。而不用添加额外的类了。。。。
上图吧
通过修饰类达到我们想要的效果。修饰类通常初始化了基类。
// 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 ))));
aWidget->show();
return 0;}
运行生成的结果

ok 今天就到这里。。。。继续学习
更多文章,欢迎访问:http://blog.csdn.net/wallwind