设计模式学习笔记(C++实现)(十)--装饰模式

1.装饰模式简介

  • 英文名称
    Decorator
  • 主要目的
    该模式可以动态地给一个对象添加一些额外的职责。
  • 使用场景
    1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;
    2.处理那些可以撤销的职责;
    3.当不能采用生成子类的方法进行扩充时。

2.装饰模式代码示例

  • 测试平台
    1.开发语言:C++
    2.开发工具:VS2015
    3.操作系统:Win7 X64
  • 代码说明
    1.Role–抽象角色类,提供接口;
    2.RealPlayer–具体角色类,本例中用来表示游戏任务;
    3.Decorator–装饰类;
    4.ConcreateAction1、ConcreateAction2–具体装饰类,本例中表示角色动作。

    注意:
    1.本例用装饰模式来表示游戏任务的一系列动作;
    2.通过装饰模式,我们可以指定一个游戏角色完成任意顺序的动作,而不用改动原有的角色类。

  • 具体代码

#include <iostream>
#include <string>
using namespace std; 

//抽象角色类
class Role
{
public:
    virtual void Action() = 0;              //抽象行动类
};

//具体角色类
class RealPlayer : public Role
{
public:
    void Action()
    {
        cout << "动作结束" << endl;
    }
};

//装饰类
class Decorator : public Role
{
public:
    Decorator(Role * pRole) : m_pRoleObj(pRole) {}
    void Action()
    {
        if (m_pRoleObj != NULL)
        {
            m_pRoleObj->Action();
        }
    }
protected:
    Role *m_pRoleObj;
};

//具体装饰类:出拳
class ConcreateAction1 : public Decorator
{
public:
    ConcreateAction1(Role *pDecorator) : Decorator(pDecorator) {}
    void Action()
    {
        AddedBehavior();
        Decorator::Action();
    }
    void  AddedBehavior()
    {
        cout << "出拳  " << endl;
    }
};

//具体动作装饰类:踢腿
class ConcreateAciton2 : public Decorator
{
public:
    ConcreateAciton2(Role *pDecorator) : Decorator(pDecorator) {}
    void Action()
    {
        AddedBehavior();
        Decorator::Action();
    }
    void  AddedBehavior()
    {
        cout << "踢腿  " << endl;
    }
};

int main()
{
    Role* pRole = new RealPlayer();

    //让角色出拳
    Decorator* pAction1 = new ConcreateAction1(pRole);

    //让角色踢腿
    Decorator* pAction2 = new ConcreateAciton2(pAction1);

    pAction2->Action();

    delete pRole;
    pRole = NULL;

    delete pAction1;
    pAction1 = NULL;

    delete pAction2;
    pAction2 = NULL;

    getchar();
    return 0;
}
  • 输出结果
    这里写图片描述

栏目导航
上一篇:设计模式学习笔记(C++实现)(九)–组合模式
下一篇:设计模式学习笔记(C++实现)(十一)–外观模式

参考文献:
1.《设计模式:可复用面向对象软件的基础》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值