设计模式之三、装饰模式Decorator
适合范围:动态地给一个对象添加一些额外的职责。
书中的实例:
以人为对象,对其做的各种装饰性的行为,如穿衣;裤子;鞋子;等等行为。
装饰模式的结构图如下:
C++实现的关键代码如下:
1、抽象类:CComponent
CComponent.h
//纯虚函数
virtual void Operation() = 0;
2、具体对象类:CConcreteComponent.cpp
void CConcreteComponent::Operation()
{
}
3、装饰父类:CDecorator.cpp
void CDecorator::Operation()
{
if(m_com != NULL)
{
m_com->Operation();
}
}
void CDecorator::SetDecorator(CComponent *com)
{
m_com = com;
}
CDecorator.h
protected:
CComponent *m_com;
4、子类:实现装饰行为 CDecoratorA.cpp
void CDecoratorA::Operation()
{
m_com->Operation();
//实现子类自己的行为
OperationA();
}
void CDecoratorA::OperationA()
{
cout<<"穿上衣服"< }
5、子类:实现装饰行为 CDecoratorB.cpp
void CDecoratorB::Operation()
{
m_com->Operation();
//实现子类自己的行为
OperationB();
}
void CDecorator::OperationB()
{
cout<<"穿上裙子"< }
...
6、客户端代码 main.cpp
CConcreteComponent *con = new CConcreteComponent();
CDecoratorA *ca = new CDecoratorA();
CDecoratorB *cb = new CDecoratorB();
ca->SetDecorator(con);
cb->SetDecorator(ca);
cb->Operation();
//释放内存
if(con != NULL)
{
delete con;
}
if(ca != NULL)
{
delete ca;
}
if(cb != NULL)
{
delete cb;
}