装饰者模式
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
