decorator模式学习笔记

   decorator模式用于动态透明地为对象添加一些额外的功能。考虑一个手机的类,实现了基本的Call方法,同时要给他添加上其他功能例如上网,查询所在位置等方法。如果采用类继承的方法,但有时不能控制添加这些功能的时机,结果可能是较为复杂的类层次结构。而采用decorator模式,用户程序不必为不需要的特征付出代价。具体的实现方式是,首先定义一个接口对象(component类),定义一个子类实体对象(concreteComponent类)完成一些接口实现,一个装饰对象(decorator类)维护一个component对象指针。当需要为实体对象添加功能时,则定义子类实体装饰对象用于向组件添加方法。

Component ( VisualComponent )
定义一个对象接口,可以给这些对象动态地添加职责。
• ConcreteComponent ( TextView )
定义一个对象,可以给这个对象添加一些职责。
• Decorator
维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
• ConcreteDecorator(BoaderDecorator,ScrollDecorator)
向组件添加职责。
•Decorator将请求转发给它的Component对象,并有可能在转发请求前后执行一些附加的动作。


class object
{
public:
object(){};
virtual void name()=0;
};

class cellPhone :public object
{
public:
virtual void name() { printf("a cell phone\n"); };
};

class phoneWrapper : public object
{
public:
virtual void name() { printf("a wrappered phone\n"); };
void setBase(object* pObj) { _pObj=pObj; };
private:
object* _pObj;
};

class phonePro : public phoneWrapper
{
public:
void LBS(){ printf("location based service\n"); };
};


int _tmain(int argc, _TCHAR* argv[])
{
cellPhone* aPhone=new cellPhone;
phonePro* aPhoneWrapper=new phonePro;

aPhoneWrapper->setBase(aPhone);
aPhoneWrapper->name();
getchar();
return 0;
}


posted on 2012-05-02 11:08 Marv 阅读(149) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿

随笔档案

文章分类

搜索

最新评论

阅读排行榜

评论排行榜