class Component {
public:
virtual void operation() = 0;
};
// 具体组件
class ConcreteComponent : public Component {
public:
void operation() override {
cout << "ConcreteComponent operation." << endl;
}
};
// 抽象装饰器
class Decorator : public Component {
protected:
Component* component;
public:
Decorator(Component* component) : component(component) {}
void operation() override {
if (component) {
component->operation();
}
}
};
// 具体装饰器A
class ConcreteDecoratorA : public Decorator {
public:
ConcreteDecoratorA(Component* component) : Decorator(component) {}
void operation() override {
Decorator::operation();
addBehaviorA();
}
void addBehaviorA() {
cout << "ConcreteDecoratorA addBehaviorA." << endl;
}
};
// 具体装饰器B
class ConcreteDecoratorB : public Decorator {
public:
ConcreteDecoratorB(Component* component) : Decorator(component) {}
void operation() override {
Decorator::operation();
addBehaviorB();
}
void addBehaviorB() {
cout << "ConcreteDecoratorB addBehaviorB." << endl;
}
};
int main() {
Component* component = new ConcreteComponent();
component = new ConcreteDecoratorA(component);
component = new ConcreteDecoratorB(component);
component->operation();
delete component;
return 0;
}
4.装饰模式
最新推荐文章于 2024-07-24 20:25:39 发布