Day35【概念解析】组合模式
行业概念

Day35【概念解析】组合模式

· 约 1,007 字 · 阅读约 6 分钟
目录

整理定义

中文名称:组合模式

英文名称:composite pattern

复述展开

What is composite pattern?

📌 组合模式是一种结构型对象设计模式。它利用分治的思想将对象组合成树状结构,使得可以像使用独立对象一样使用它们。

该方式的最大优点在于你无需了解构成树状结构的对象的具体类。 你也无需了解对象是简单的还是复杂的。 你只需调用通用接口以相同的方式对其进行处理即可。 当你调用该方法后, 对象会将请求沿着树结构传递下去。

这里用到了分而治之,递归的思想去解决问题。

🌰*1

在真实世界中,军队就是这样设置的,可以看成是组合模式。部队包含几个师,师又包含旅,旅包含团,再则营,连,排。一个命令从上层发出,通过每个层级进行传递,直到每个士兵都服从这个命令。

🌰*2

Notion本身,是有一个一个的block构成,它可以是一个text,是head,引用等等。同时,block也可以包含block,可以嵌套下去,这种模式也是一种组合模式。使用notion api时,返回的也是嵌套的block列表。

组合模式结构

image

  1. 组件 (Component) 接口描述了树中简单项目和复杂项目所共有的操作。

  2. 叶节点 (Leaf) 是树的基本结构, 它不包含子项目。

  3. 容器 (Container)——又名 “组合 (Composite)”——是包含叶节点或其他容器等子项目的单位。 容器不知道其子项目所属的具体类, 它只通过通用的组件接口与其子项目交互。

  4. 客户端 (Client) 通过组件接口与所有项目交互。 因此, 客户端能以相同方式与树状结构中的简单或复杂项目交互。

优缺点

优点:

  • 你可以利用多态和递归机制更方便地使用复杂树结构。

  • 开闭原则。 无需更改现有代码, 你就可以在应用中添加新元素, 使其成为对象树的一部分。

缺点:

  • 对于功能差异较大的类, 提供公共接口或许会有困难。 在特定情况下, 你需要过度一般化组件接口, 使其变得令人难以理解。

理解体会

组合模式再生活中其实非常常见,也是一种非常常见的是设计模式,文件系统就是有一种典型的树状结构。

对于绝大多数需要生成树状结构的问题来说, 组合都是非常受欢迎的解决方案。 组合最主要的功能是在整个树状结构上递归调用方法并对结果进行汇总。

合理利用好组合模式,就能掌握好树状结构相关的需求。

相关文章