您的位置:首页 > 编程语言 > C语言/C++

C++设计模式之装饰者模式(Decorator)

2015-07-16 14:01 567 查看
#include "StdAfx.h"
#include <SSTREAM>
#include<iostream>
#include<fstream>
#include<malloc.h>
#include <windows.h>
#include <list>
using namespace std;
class Base
{//基类
public:
virtual void Run()
{
printf("基类跑步.....");
}
protected:
private:
};
//当你的工程的类全部都设计好了,此时需求突然说在类功能上增加一些功能,那么我们此时可以使用装饰者模式
//实现了在运行时动态的扩展对象功能的能力(Concrete也就是我们平时使用到的一个具体类,但是使用过程中发现该类不够使用了,所以增加了BaseDecorator,DecoratorA和DecoratorB)
class Concrete:public Base
{//具体类
public:
virtual void Run()
{
printf("具体类在跑步....\n");
}
protected:
private:
};
//下面就是新增加的功能,以方便调用
class BaseDecorator:public Base
{//装饰基类
public:
Base* m_pBase;
virtual void Run()
{
if(m_pBase!=NULL)
{
m_pBase->Run();
}
}
protected:
private:
};

class DecoratorA:public BaseDecorator
{//装饰类一
public:
virtual void Run()
{
AddAction();//做一些动作
m_pBase->Run();
}
virtual void AddAction()
{
printf("做一些动作......\n");
}
protected:
private:
};
class DecoratorB:public BaseDecorator
{
public:
virtual void Run()
{
m_pBase->Run();
AddBehaviour();//添加一些行为
}
void AddBehaviour()
{
printf("添加了行为....\n");
}
protected:
private:
};
int main(void)
{
BaseDecorator *pA=new DecoratorA();
Base* pB=new Concrete();
pA->m_pBase=pB;
pA->Run();

BaseDecorator* pC=new DecoratorB();
pC->m_pBase=pB;
pC->Run();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: