《设计模式》装饰者模式
Posted joker D888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《设计模式》装饰者模式相关的知识,希望对你有一定的参考价值。
《设计模式》装饰者模式
装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许在不改变现有对象结构的情况下,动态地添加行为或责任到对象上。在装饰者模式中,有一个抽象组件(Component)接口定义了基本的操作,具体组件(Concrete Component)是实现了这个接口的对象。装饰器(Decorator)实现了这个抽象组件的接口,它持有一个指向组件对象的指针,并定义了与组件接口一致的接口。同时,装饰器可以在调用组件接口前或者后,添加额外的行为或责任。具体装饰器(Concrete Decorator)是实现了装饰器接口的对象,它可以包装一个具体组件或另一个装饰器。
使用装饰者模式的主要优点包括:
- 在不改变现有对象结构的情况下,可以动态地添加或删除行为或责任。
- 可以使用多个装饰器对一个对象进行多次装饰,以实现复杂的行为。
- 装饰器与被装饰的对象可以独立变化,互不影响。
使用装饰者模式的一些常见场景包括:
- 当需要在不影响现有代码的情况下,动态地给一个对象添加新的行为或责任时,可以使用装饰者模式。
- 当需要通过多次装饰来实现复杂的行为时,可以使用装饰者模式。
- 当需要在不影响其他对象的情况下,对某个对象进行细粒度的控制时,可以使用装饰者模式。
装饰者模式的思想精髓在于它允许在运行时动态地添加行为,而不需要通过继承来扩展对象的行为。在装饰者模式中,所有的装饰器都遵循同一个接口,这使得它们可以互相替换和组合,从而实现非常灵活的行为扩展。同时,由于装饰器模式不需要通过修改原有代码来添加新行为,因此可以很好地遵循开放封闭原则,使得代码更加可维护和可扩展。
#include <iostream>
using namespace std;
// 基础接口
class Component
public:
virtual void operation() = 0;
;
// 具体组件
class ConcreteComponent : public Component
public:
virtual void operation()
cout << "具体组件的操作" << endl;
;
// 装饰抽象类
class Decorator : public Component
public:
Decorator(Component* component) : m_pComponent(component)
virtual void operation()
if (m_pComponent != nullptr)
m_pComponent->operation();
protected:
Component* m_pComponent;
;
// 具体装饰类A
class ConcreteDecoratorA : public Decorator
public:
ConcreteDecoratorA(Component* component) : Decorator(component)
virtual void operation()
Decorator::operation();
addBehavior();
void addBehavior()
cout << "具体装饰对象A的操作" << endl;
;
// 具体装饰类B
class ConcreteDecoratorB : public Decorator
public:
ConcreteDecoratorB(Component* component) : Decorator(component)
virtual void operation()
Decorator::operation();
addBehavior();
void addBehavior()
cout << "具体装饰对象B的操作" << endl;
;
int main()
Component* component = new ConcreteComponent();
ConcreteDecoratorA* decoratorA = new ConcreteDecoratorA(component);
ConcreteDecoratorB* decoratorB = new ConcreteDecoratorB(decoratorA);
decoratorB->operation();
delete decoratorB;
delete decoratorA;
delete component;
return 0;
在这个示例中,Component
定义了组件的基本接口,ConcreteComponent
是具体的组件实现。Decorator
是装饰抽象类,继承自 Component
,并持有一个 Component
对象。ConcreteDecoratorA
和 ConcreteDecoratorB
是具体的装饰类,继承自 Decorator
,并在 operation
方法中先调用父类的 operation
方法,再增加自己的行为。
在 main
函数中,我们首先创建了一个 ConcreteComponent
对象,然后通过 ConcreteDecoratorA
和 ConcreteDecoratorB
对其进行装饰,最终调用了 decoratorB
的 operation
方法来触发整个装饰过程。输出结果如下:
具体组件的操作
具体装饰对象A的操作
具体装饰对象B的操作
以上是关于《设计模式》装饰者模式的主要内容,如果未能解决你的问题,请参考以下文章