装饰者模式之C++实现

 

 

#include  " stdafx.h "
#include < string>
#include <iostream>
using  namespace std;

class IComponent
{
public:
     virtual  void operate() =  0;
};

class ConcreteComponent :  public IComponent
{
public:
     virtual  void operate()
    {
        cout <<  " 核心处理 " << endl;
    }
};

class Decorator :  public IComponent
{
protected:
    IComponent *pComp;
public:
     virtual  void Decorate(IComponent *component)
    {
        pComp = component;
    }

     virtual  void operate()
    {
        pComp->operate();
    }
};

class ConcreteDecoratorA :  public Decorator
{
private:
    IComponent *pComp;
public:   
     void Behavior()
    {
        cout <<  " DecoratorA " << endl;
    }

     virtual  void Decorate(IComponent *component)
    {
        pComp = component;
    }

     virtual  void operate()
    {
        pComp->operate();
        Behavior();
    }
};

class ConcreteDecoratorB :  public Decorator
{
private:
    IComponent *pComp;
public:   
     void Behavior()
    {
        cout <<  " DecoratorB " << endl;
    }

     virtual  void Decorate(IComponent *component)
    {
        pComp = component;
    }

     virtual  void operate()
    {
        pComp->operate();
        Behavior();
    }
};


int main()
{
    IComponent *pComp =  new ConcreteComponent();
    Decorator *pDecorator =  new Decorator;
    ConcreteDecoratorA *pDecoratorA =  new ConcreteDecoratorA;
    ConcreteDecoratorB *pDecoratorB =  new ConcreteDecoratorB;
    
    pDecorator->Decorate(pComp);
    pDecoratorA->Decorate(pDecorator);
    pDecoratorB->Decorate(pDecoratorA);
    pDecoratorB->operate();

    free(pDecoratorA);
    free(pDecorator);
    free(pComp);
     return  0;
}

 

你可能感兴趣的:(装饰者模式)