设计模式:装饰器模式
#include <iostream>
using namespace std;
class Component {
public:
virtual void Operation() = 0;
};
class ConcreteComponent : public Component {
public:
void Operation() {
cout<<"I am no decoratored ConcreteComponent"<<endl;
}
};
class Decorator : public Component {
public:
Decorator(Component *pComponent) : m_pComponent(pComponent) {}
void Operation() {
if (m_pComponent != NULL) {
m_pComponent->Operation();
}
}
protected:
Component *m_pComponent;
};
class ConcreteDecoratorA : public Decorator {
public:
ConcreteDecoratorA(Component *pDecorator) : Decorator(pDecorator){}
void Operation() {
AddedBehavior();
Decorator::Operation();
}
void AddedBehavior() {
cout<<"This is added behavior A"<<endl;
}
};
class ConcreteDecoratorB : public Decorator {
public:
ConcreteDecoratorB(Component *pDecorator) : Decorator(pDecorator){}
void Operation() {
AddedBehavior();
Decorator::Operation();
}
void AddedBehavior() {
cout<<"This is added behavior B"<<endl;
}
};
int main(int argc, char* argv[]) {
Component *pComponent = new ConcreteComponent();
Decorator *pDecoratorA = new ConcreteDecoratorA(pComponent);
pDecoratorA->Operation();
cout<<"--1--"<<endl;
Decorator *pDecoratorB = new ConcreteDecoratorB(pComponent);
pDecoratorB->Operation();
cout<<"--2--"<<endl;
Decorator *pDecoratorBA = new ConcreteDecoratorB(pDecoratorA);
pDecoratorBA->Operation();
cout<<"--3--"<<endl;
delete pDecoratorBA;
pDecoratorBA = NULL;
delete pDecoratorB;
pDecoratorB = NULL;
delete pDecoratorA;
pDecoratorA = NULL;
delete pComponent;
pComponent = NULL;
}
输出:
This is added behavior A
I am no decoratored ConcreteComponent
–1–
This is added behavior B
I am no decoratored ConcreteComponent
–2–
This is added behavior B
This is added behavior A
I am no decoratored ConcreteComponent
–3–