装饰者模式
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就被装饰咯.