设计模式学习-每日一记(9.装饰者模式)

it2022-05-05  173

装饰者模式

A.定义:

动态地给一个对象添加一些职责。就增加功能而言,装饰者模式比生成子类更灵活。

B.定义分析:

"动态地给一个对象添加一些职责。就增加功能而言,装饰者模式比生成子类更灵活。"我们知道,对象的职责定义在类中,类的方法决定了对象的职责.

"动态地给一个对象添加一些职责。就增加功能而言,装饰者模式比生成子类更灵活。"装饰者模式的意图是不修改类,而是动态给对象添加职责.

"动态地给一个对象添加一些职责。就增加功能而言,装饰者模式比生成子类更灵活。"装饰者不修改类,而是动态给对象加,当然灵活.

C.问题:

(1)怎么实现?

假设有类A和SubA,SubA继承自A.A有个接口dress表示穿衣服.

1 class A 2 { 3 virtual void dress(void) = 0; 4 }; 5 class SubA : public A 6 { 7 void dress(void) 8 { 9 //穿T恤.10 }11 };

但是,我们突然间想要扩展下dress这个接口,但是有不想改变A和SubA。这时候,我们使用装饰模式:

class DecoratorHat : public A{A* m_p;DecoratorHat(A* p):A(){m_p = p;}void dress(void){  //戴帽子  m_p->dress();}};class DecoratorGlass : public A{A* m_p;DecoratorGlass(A* p):A(){m_p = p;}void dress(void){  //戴眼镜  m_p->dress();}};

其中的DecoratorHat和DecoratorGlass就是装饰者,用法可以是:

A* p = NULL;p = new DecoratorHat(new DecoratorGlass(new SubA));p->dress();

这时候,SubA就被装饰咯.

转载于:https://www.cnblogs.com/linucos/archive/2011/10/28/2227975.html


最新回复(0)