优点:1)动态地给对象添加一些额外的职责
2)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责
#include <iostream>
using namespace std;
class Base
{
public:
virtual void Operator() = 0;
};
class A : public Base
{
public:
void Operator(){cout << "A::Operator"<<endl;}
};
class Decorator : public Base
{
public:
Decorator(Base*base){_base = base;}
void Operator()
{
if(_base)
_base->Operator();
}
private:
Base *_base;
};
class DecoratorA : public Decorator
{
public:
DecoratorA(Base *base):Decorator(base){}
void Operator()
{
addStateA();
Decorator::Operator();
}
void addStateA(){cout << "DecoratorA::addStateA"<<endl;}
};
class DecoratorB : public Decorator
{
public:
DecoratorB(Base *base):Decorator(base){}
void Operator()
{
addStateB();
Decorator::Operator();
}
void addStateB(){cout << "DecoratorB::addStateB"<<endl;}
};
int main()
{
A *a = new A;
Decorator *decoratorA = new DecoratorA(a);
decoratorA->Operator();
cout << "-----------"<<endl;
Decorator *decoratorB = new DecoratorB(a);
decoratorB->Operator();
cout << "-----------"<<endl;
Decorator *ab = new DecoratorB(decoratorA);
ab->Operator();
return 0;
}
运行结果:
DecoratorA::addStateA
A::Operator
DecoratorB::addStateB
A::Operator
DecoratorB::addStateB
DecoratorA::addStateA
A::Operator