您的位置:首页 > 其它

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

2011-10-28 17:16 232 查看
装饰者模式

A.定义:

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

B.定义分析:

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

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

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

C.问题:

(1)怎么实现?

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

class A
{
virtual void dress(void) = 0;
};
class SubA : public A
{
void dress(void)
{
//穿T恤.
}
};


但是,我们突然间想要扩展下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就被装饰咯.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: