设计模式c++实现(一):装饰(Decorator)模式

来源:互联网 发布:进口美工刀架品牌 编辑:程序博客网 时间:2024/06/17 16:51

转载请注明,来自:http://blog.csdn.net/skyman_2001

class Component{public:Component() {}virtual ~Component() {}virtual void operation() = 0;virtual Component *remove() = 0;};class ConcreteComponent: public Component{public:ConcreteComponent() {}~ConcreteComponent() {}void operation(){std::cout <<"Concrete component operation"<< std::endl;}Component *remove(){return this;}};
class Decorator : public Component{public:Decorator(Component *comp) : m_component(comp) {}virtual ~Decorator() {} virtual void operation(){m_component->operation();}Component *remove(){return m_component;} private:Component *m_component;};class Decor1: public Decorator{public:Decor1(Component *comp) : Decorator(comp){}virtual ~Decor1() {}virtual void operation(){Decorator::operation();addedBehavior();}private:void addedBehavior(){std::cout << "Decor1 addedBehavior" << std::endl;}};class Decor2: public Decorator{public:Decor2(Component *comp) : Decorator(comp) {}virtual ~Decor2() {}virtual void operation(){Decorator::operation();addedBehavior();}private:void addedBehavior(){std::cout << "Decor2 addedBehavior" << std::endl;}};

int _tmain(int argc, _TCHAR* argv[]){Component* concrete = new ConcreteComponent();Component* decored1 = new Decor1(concrete);Component* decored2 = new Decor2(decored1);decored2->operation();cout << "---------------" << endl;Component* temp = decored2->remove();temp->operation();cout << "---------------" << endl;temp = temp->remove();temp->operation();cout << "---------------" << endl;temp = temp->remove();temp->operation();delete decored2;delete decored1;delete concrete;return 0;}

运行结果:

Concrete component operation
Decor1 addedBehavior
Decor2 addedBehavior
---------------
Concrete component operation
Decor1 addedBehavior
---------------
Concrete component operation
---------------
Concrete component operation


0 0
原创粉丝点击