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

C++ 设计模式之组合模式

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

设计模式之组合模式


  组合模式,将对象组合成属性结构以表示‘部分整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。其UML图如下:

  一个组织有很多子组织,而无论子组织是单独一个部门或是一个分组织。该组织都希望把它们当成一样的子组织来管理。举个例子吧,就拿公司来说吧,一个公司总部为了方便管理希望把分公司当成一个部门来管理就行了。比如公司要发奖金了,总公司只用通知自己的所有部门就可以了。对于分公司,只用通知分公司就可以了,而不用一一通知分公司的各个部门。具体的实现就是Cposite中有一个自己子组织的列表,当有什么通知要执行时,按顺序通知列表中的子组织就行了。而如果子组织中有组织的话也时执行相同的操作,因为它们都实现了相同的接口。

示例代码如下:

1 // CpositeModel.h文件 2 #pragma once 3 #include <iostream> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 8 class CponentPtr 9 17 virtual void add(CponentPtr * p) = 0; 18 virtual void remove(CponentPtr * p) = 0; 19 virtual void display() = 0; 20 }; 21 22 class LeafPtr : public CponentPtr 23 26 void add(CponentPtr * p) 27 30 void remove(CponentPtr * p) 31 34 void display() 35 38 }; 39 40 class CpositePtr : public CponentPtr 41 ; 47 ~CpositePtr() 48 53 } 54 void add(CponentPtr * p) 55 ); 58 if (it == m_vec.end()) 59 m_vec.push_back(std::shared_ptr<CponentPtr>(p)); 60 } 61 void remove(CponentPtr * p) 62 ); 65 if (it == m_vec.end()) 66 return; 67 m_vec.erase(it); 68 } 69 void display() 70 75 } 76 };

测试代码如下:

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

测试结果如下图:

当你发现需求中是体现部分于整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,同意使用组合结构中的所有对象时,就应该考虑使用组合模式了。



上一篇:C/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种方法技巧

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