C++设计模式——装饰模式

来源:互联网 发布:网络传输协议 http 编辑:程序博客网 时间:2024/05/16 12:46


#include <iostream>using namespace std;class Component{public:    virtual void Operation() = 0;};class ConcreteComponent : public Component{public:    virtual void Operation()    {        cout << "I am no decoratored ConcreteComponent" << endl;    }};class Decorator :public Component{private:    Component *m_pComponent;public:    Decorator(Component *p)    {        m_pComponent = p;    }    void Operation()    {        m_pComponent->Operation();    }};class ConcreteDecoratorA : public Decorator{public:    ConcreteDecoratorA(Component *p) :Decorator(p)    {    }    void  AddedBehavior()    {        cout << "This is added behavior A." << endl;    }    void Operation()    {        AddedBehavior();        Decorator::Operation();    }};class ConcreteDecoratorB : public Decorator{public:    ConcreteDecoratorB(Component *p) :Decorator(p)    {    }    void  AddedBehavior()    {        cout << "This is added behavior B." << endl;    }    void Operation()    {        AddedBehavior();        Decorator::Operation();    }};int main(){    Component *pComponent = new ConcreteComponent();    Decorator *pDecA = new ConcreteDecoratorA(pComponent);    pDecA->Operation();    Decorator *pDecB = new ConcreteDecoratorB(pComponent);    pDecB->Operation();    Decorator *pDecAB = new ConcreteDecoratorB(pDecA);    pDecAB->Operation();    delete pDecAB;    pDecAB = NULL;    delete pDecB;    pDecB = NULL;    delete pDecA;    pDecA = NULL;    delete pComponent;    pComponent = NULL;    return 0;}


0 0
原创粉丝点击