Composite objects into a tree structure so that individual objects and compositions of objects can be treated uniformly.

组合模式用于将对象(s)组合成一个树形结构,来表示部分-整体的层次关系(part-whole hierarchy),该设计模式允许客户以一个统一的方式对待每一个独立的对象或者由对象构成的容器(也即无论是独立的对象——叶子/部分/part,还是由这些对象组成的容器/whole,均继承自某一共同的抽象基类,获得相同的接口)。例如,我们磁盘上的文件/文件夹,即是这样一种结构。

实现上:

  • (1)叶子节点(LeafNode):存储数据,不具备分支
  • (2)内部节点(InternalNode):不存储数据,具备分支
  • (3)叶子节点和内部节点,继承自统一的基类(Node)

含义上:

  • (1)形成了局部-整体(part-whole)的递归结构

组合设计模式的 UML 类图如下:

现在我们用组合设计模式,模拟文件/文件夹的目录结构。如刻画如下的目录结构:

class Component
{
public:virtual ~Component() {}virtual void traverse() = 0;
};// 这里的继承
// 仅仅是获得统一的接口,也即是traverse,并无实际意义上的继承关系
class File :public Component
{
public:File(const std::string& name):_name(name){}void traverse() { std::cout << _name << ", "; }
private:std::string _name;
};// 同样这里的继承
// 仅仅是获得统一的接口,也即traverse,并无实际意义上的继承关系
class Folder :public Component
{
public:void add(Component* item){ _children.push_back(item); }void traverse(){for (auto elem: _children)elem->traverse();}
private:std::vector<Component*> _children;
};int main(int, char**)
{Folder d1, d2;File f1("file_1");File f2("file_2");File f3("file_3");File f4("file_4");d1.add(&f1);d1.add(&f2);d1.add(&d2);d2.add(&f3);d2.add(&f4);d1.traverse();std::cout << std::endl;return 0;
};

C++设计模式——Composite 组合模式相关推荐

  1. C++设计模式-Composite组合模式

    Composite组合模式 作用:将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. UML图如下: 在Compo ...

  2. 设计模式之组合模式(Composite)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  3. 设计模式08: Composite 组合模式(结构型模式)

    Composite 组合模式(结构型模式) 对象容器的问题 在面向对象系统中,我们常会遇到一类具有"容器"特征的对象--即他们在充当对象的同时,又是其他对象的容器. public ...

  4. 设计模式学习笔记(九)——Composite组合模式

    Composite组合模式主要是应对这样的问题:一类具有"容器特征"的对象--即他们在充当对象的同时,又是其他对象的容器的情况.在编写时我们常常会造成:客户代码过多地依赖于对象容器 ...

  5. Java 设计模式之 Composite 组合模式

    Composite  组合模式相对简单,一般用于处理树状结构,递归结构,类似计算机中的文件系统,有文件夹,文件,文件夹里可以有文件:再比如一棵树,有枝干,叶子节点组成,枝干上又有叶子. 这里以构造一棵 ...

  6. 设计模式(八)Composite(组合模式)

    @TOC Composite(组合模式):将对象组合成树形结构以表示"部分-整体"的层次结构.它使得客户对单个对象和复合对象的使用具有一致性. 结构 意图 将对象组合成树形结构以表 ...

  7. 1、【设计模式】组合模式

    java设计模式之组合模式 [学习难度:★★★☆☆,使用频率:★★★★☆]  树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式 ...

  8. java 组合代码_java实现Composite组合模式的实例代码

    //20210121 写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现组合模式 组合模式核心思想类似文件夹的概念,构件树形结构,树形有叶子结点和文件夹 ...

  9. 组合的示例代码 java_java实现Composite组合模式的实例代码

    //20210121 写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现组合模式 组合模式核心思想类似文件夹的概念,构件树形结构,树形有叶子结点和文件夹 ...

最新文章

  1. Eclipse里的Java EE视图在哪里?MyEclipse里的Java EE视图在哪里?MyEclipse里的MyEclipse Java Enterprise视图在哪里?(图文详解)...
  2. C++11 新增关键字decltype学习
  3. 基于pygame的射击小游戏制作(五)绘制开始按钮
  4. boost::mp11::mp_quote_trait相关用法的测试程序
  5. 关于 Http 协议,你必须要知道的
  6. wordpress通过$wpdp更新数据表内容
  7. oracle sql列默认值,sql – Oracle:指定对象类型列的默认值
  8. 趣味理解ADO.NET对象模型
  9. RNN LSTM GRU Attention transformer公式整理总结(超详细图文公式)
  10. Linux系统上QQ闪退的问题
  11. 伺服驱动器,方案迈信ep100 成熟方案STM32源代码原理图,包含原理图,pcb图,源码
  12. EasyDarwin源码分析(二)——rtsp-server、rtsp-session
  13. FMCW毫米波雷达中CFAR研究初探(附Python代码)
  14. 2021年超全微博营销全攻略抢先看!
  15. 怎么样关掉红米note开发者选项
  16. word嵌入对象依损坏_出错提示“Word 未能写某些嵌入对象,因为内容或磁盘空间不足”...
  17. 单例模式 ,多例模式及工厂设计模式的简单案例介绍
  18. 用计算机找女朋友,大学生必备远程软件:能找女朋友、玩游戏、赚零花钱
  19. 数据结构与算法笔记:哈希表——力扣389
  20. 什么是域名服务器?域名服务器的作用是什么?

热门文章

  1. Android中Activity的启动模式和使用场景
  2. Doris FE配置参数(全面)
  3. 怎样设置计算机默认字体及语言,电脑win10系统怎么将paint 3D的语言设置为中文...
  4. java kafkastream_手把手教你写Kafka Streams程序
  5. mysql加载原ibd mysql8.0_MySQL 8.0 使用ibd文件恢复数据步骤
  6. mysql 断号查询_怎么查询SQL中连续编号中间的断号
  7. php 过滤非utf8,PHP如何将不是UTF8的字符过滤掉(代码)
  8. Pytorch专题实战——数据转换(Dataset Transforms)
  9. Python基础——import(导入模块)
  10. Linux安装docker及docker基本操作