<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;
}