设计模式之(三、装饰模式Decorator)

本文详细介绍了装饰模式的概念及其适用场景,并通过C++代码示例展示了如何动态地为对象添加新的职责,而不改变其原有结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式之三、装饰模式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;

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值