设计模式之装饰模式(Decorator)
2017-06-29 16:12
225 查看
优点:1)动态地给对象添加一些额外的职责
2)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责
运行结果:
DecoratorA::addStateA
A::Operator
DecoratorB::addStateB
A::Operator
DecoratorB::addStateB
DecoratorA::addStateA
A::Operator
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
相关文章推荐
- 设计模式之装饰模式篇(Decorator)
- 设计模式之装饰模式篇(Decorator)
- NET设计模式之一:装饰模式(Decorator Pattern)
- 设计模式--装饰模式(Decorator)
- DOTA版设计模式——装饰模式[Decorator Pattern]
- 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)
- 设计模式[6] Decorator Pattern 装饰模式
- .NET设计模式(10):装饰模式(Decorator Pattern)
- .NET设计模式(10):装饰模式(Decorator Pattern)
- 设计模式c#语言描述——装饰(Decorator)模式
- 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)
- 设计模式c#描述——装饰(Decorator)模式
- 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)
- 我读设计模式之装饰模式(Decorator Pattern)
- 设计模式c#语言描述——装饰(Decorator)模式
- 结构型设计模式---Decorator模式(装饰模式)
- 解读设计模式----装饰模式(Decorator Pattern)
- [导入]C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式).zip(9.84 MB)
- .NET设计模式(10):装饰模式(Decorator Pattern)
- 设计模式(11)-装饰模式(Decorator)