首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

用代码跟UML图化解设计模式之《装饰模式》

2012-11-04 
用代码和UML图化解设计模式之《装饰模式》这个模式看了两次,因为我有点不太理解,其实到现在也不太理解。通过

用代码和UML图化解设计模式之《装饰模式》

这个模式看了两次,因为我有点不太理解,其实到现在也不太理解。

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

上图吧用代码跟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;}


 运行生成的结果

用代码跟UML图化解设计模式之《装饰模式》

ok 今天就到这里。。。。继续学习

更多文章,欢迎访问:http://blog.csdn.net/wallwind

 

热点排行