当前位置: 首页 > 网络知识

C++ 设计模式之装饰模式

时间:2026-01-27 08:39:58

设计模式之装饰模式


装饰模式,动态地给一个对象添加一些额外的职责(不一定重要的功能,只是偶然一次执行),就增加功能来说,装饰模式比生成子类更为灵活。其UML图如下:

  ConcreteCponent定义了一个具体的对象,ConcreteDecorator类是用来装饰ConcreteCponent的。在Decorator类内由一个Cponent的引用实际是指向ConcreteCponent的。一旦一个装饰类装饰了一个组件,则该装饰类即代表了该组件,因为它们都有相同的基类,并且所有的装饰类都有相同的基类,所以可以连续不断的装饰下去。

示例代码如下:

1 // DecoratorModle.h文件 2 #pragma once 3 4 #include <iostream> 5 // 基础类 6 class Cponent 7 13 }; 14 15 class ConcreteCponent : public Cponent 16 22 }; 23 // 装饰者 24 class Decorator : public Cponent 25 31 virtual void Operation() 32 35 protected: 36 Cponent * m_pCponent; 37 }; 38 // 装饰者A 39 class Decorator_A : public Decorator 40 47 }; 48 // 装饰者B 49 class Decorator_B : public Decorator 50 57 };

测试代码如下:

1 #include <iostream> 2 #include "DecoratorModel.h" 3 4 int main() 5

测试结果如下:

  装饰模式在装饰模式中只能根根据需求按顺序装饰起来,一个Decorator对象只能装饰一个具体组件一次,切忌不能循环装饰。

  装饰模式是为已有功能动态地添加更多的一种方式。当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为,它们在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主要类的复杂度,而这些新加入的东西仅仅是为了满足一些某种特定情况下才会执行的特殊行为的需要。而装饰模式却提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类种,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时更具需要有选择地、按顺序地使用装饰功能包装对象了。其优点是把类种的装饰功能从类种搬移去除,这样可以简化原有的类。这样做更大的好处就是有效地把类的核心职责和装饰功能区分开了。而且可以去除相关类种重复的装饰逻辑。



上一篇:C++ 设计模式之责任链模式
下一篇:C++ 设计模式之工厂方法模式
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素