装饰模式(Decorator):动态的给一个对象添加一些额外的职责。
感觉这个模式可以和策略模式相比较一下,策略模式是动态灵活的改变不同的算法(由类中的setComponent(strategyX)),而装饰模式呢,setComponent(componentX);可以看出装饰模式是装饰的同类对象,大家都是继承相同的基类,实现某个相同的方法,在这个方法中,实现自己特有的操作,同时调用compoent的操作,来调用前面的操作。
装饰模式类关系图:
c++实现代码:
class Component { public: virtual void Operation() = 0; }; class ConcreteComponent : public Component { public : ConcreteComponent() {} ConcreteComponent(string n):name(n) {} void Operation() { cout << "对 " << name << " 的装饰过程完成 " << endl; } private: string name; }; class Decorator : public Component { public: void setComponent(Component *com) { component = com; } virtual void Operation() = 0; protected: Component *component; }; class ConcreteDecoratorA : public Decorator { public: void Operation(); void BehaviorA() { cout << "A的装饰过程" << endl; } }; void ConcreteDecoratorA::Operation() { BehaviorA(); component->Operation(); } class ConcreteDecoratorB : public Decorator { public: void Operation(); void BehaviorB() { cout << "B的装饰过程" <<endl; } }; void ConcreteDecoratorB::Operation() { BehaviorB(); component->Operation(); } class ConcreteDecoratorC : public Decorator { public: void BehaviorC() { cout << "C的装饰过程" << endl; } void Operation(); }; void ConcreteDecoratorC::Operation() { BehaviorC(); component->Operation(); }
参考:《大话设计模式》