#include "stdafx.h"
#include <iostream>
using namespace std;
class Component
{
public:
virtual void Operation() = 0;
};
class ConcreteComponent : public Component
{
public:
virtual void Operation()
{
cout << "ConcreteComponent.Operation()" << endl;
}
};
class Decorator : public Component
{
public:
void SetComponent(Component *component)
{
this->component = component;
}
virtual void Operation()
{
if (component != NULL)
{
component->Operation();
}
}
protected:
Component *component;
};
class ConcreteDecoratorA : public Decorator
{
public:
virtual void Operation()
{
Decorator::Operation();
cout << "ConcreteDecoratorA.Operation()" << endl;
}
};
class ConcreteDecoratorB : public Decorator
{
public:
virtual void Operation()
{
Decorator::Operation();
AddedBehavior();
cout << "ConcreteDecoratorB.Operation()" << endl;
}
void AddedBehavior()
{
}
};
int _tmain(int argc, _TCHAR* argv[])
{
ConcreteComponent *c = new ConcreteComponent();
ConcreteDecoratorA *d1 = new ConcreteDecoratorA();
ConcreteDecoratorB *d2 = new ConcreteDecoratorB();
d1->SetComponent(c);
d2->SetComponent(d1);
d2->Operation();
return 0;
}
输出结果:
ConcreteComponent.Operation()
ConcreteDecoratorA.Operation()
ConcreteDecoratorB.Operation()
请按任意键继续. . .