大运天成赖搏击

进步最重要

导航

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

装饰者模式

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

posted on 2011-10-28 17:16  linucos  阅读(205)  评论(0)    收藏  举报