c++装饰模式

来源:互联网 发布:矩阵kvm 编辑:程序博客网 时间:2024/06/09 21:27
<pre name="code" class="cpp">#include "stdafx.h"#include <iostream>#include <vector>using namespace std;class Component{public:virtual void Method() = 0;};class ConcreteComponent:public Component{public:void Method();};void ConcreteComponent::Method(){cout<<"I am the component need to be decorated"<<endl;}class Decorator:public Component{private:Component* m_pComponent;public:Decorator(Component* pComponent):m_pComponent(pComponent) {}void Method();};void Decorator::Method(){if(m_pComponent != NULL){m_pComponent->Method();}}class ConcreteDecoratorA:public Decorator{public:ConcreteDecoratorA(Component* pComponent):Decorator(pComponent) {}void Method();void Add();};void ConcreteDecoratorA::Add(){cout<<"we have add A for the component"<<endl<<endl;}void ConcreteDecoratorA::Method(){Decorator::Method();Add();}class ConcreteDecoratorB:public Decorator{public:ConcreteDecoratorB(Component* pComponent):Decorator(pComponent) {}void Method();void Add();};void ConcreteDecoratorB::Add(){cout<<"we have add B for the component"<<endl<<endl;}void ConcreteDecoratorB::Method(){Decorator::Method();Add();}int _tmain(int argc, _TCHAR* argv[]){Component* pConPonent = new ConcreteComponent;Decorator* pDecoratorA = new ConcreteDecoratorA(pConPonent);pDecoratorA->Method();Decorator* pDecoratorB = new ConcreteDecoratorB(pConPonent);pDecoratorB->Method();Decorator* pDecorator = new ConcreteDecoratorB(pDecoratorA);pDecorator->Method();
//      forget to delete...getchar();return 0;}


                                             
0 0
原创粉丝点击