您的位置:首页 > 其它

设计模式之装饰模式(Decorator)

2017-06-29 16:12 225 查看
优点: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息