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

来源:互联网 发布:linux kill firefox 编辑:程序博客网 时间:2024/06/07 22:10
#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; }

0 0
原创粉丝点击