type
status
date
slug
summary
tags
category
icon
password
整理定义
中文名称:组合模式
英文名称:composite pattern
出处 | 定义 |
中国大百科全书 | 将对象组成树结构来表示局部和整体的层次关系,客户可以统一处理单个对象和对象的组合的一种设计模式 |
设计模式 | 组合模式是一种结构型设计模式,你可以使用它将对象组合成树状结构,并且能像使用独立对象一样使用它们。 |
百度百科 | 组合模式 (Composite Pattern) 组合模式使得用户对单个对象和组合对象的使用具有一致性。 有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构 解耦 。 |
维基百科 | In software engineering, the composite pattern is a partitioning design pattern. The composite pattern describes a group of objects that are treated the same way as a single instance of the same type of object. The intent of a composite is to "compose" objects into tree structures to represent part-whole hierarchies. Implementing the composite pattern lets clients treat individual objects and compositions uniformly.[1]
【在软件工程中,组合模式是一种分区设计模式。 模式组合描述了一组对象,这些对象的处理方式与同一类型对象的单个实例相同。 组合的目的是将对象“组合”成树结构以表示部分-整体层次结构。 实现复合模式可以让客户端统一处理单个对象和组合。】 |
复述展开
What is composite pattern?
组合模式是一种结构型对象设计模式。它利用分治的思想将对象组合成树状结构,使得可以像使用独立对象一样使用它们。
该方式的最大优点在于你无需了解构成树状结构的对象的具体类。 你也无需了解对象是简单的还是复杂的。 你只需调用通用接口以相同的方式对其进行处理即可。 当你调用该方法后, 对象会将请求沿着树结构传递下去。
这里用到了分而治之,递归的思想去解决问题。
🌰*1
在真实世界中,军队就是这样设置的,可以看成是组合模式。部队包含几个师,师又包含旅,旅包含团,再则营,连,排。一个命令从上层发出,通过每个层级进行传递,直到每个士兵都服从这个命令。
🌰*2
Notion本身,是有一个一个的block构成,它可以是一个text,是head,引用等等。同时,block也可以包含block,可以嵌套下去,这种模式也是一种组合模式。使用notion api时,返回的也是嵌套的block列表。
组合模式结构
- 组件 (Component) 接口描述了树中简单项目和复杂项目所共有的操作。
- 叶节点 (Leaf) 是树的基本结构, 它不包含子项目。
一般情况下, 叶节点最终会完成大部分的实际工作, 因为它们无法将工作指派给其他部分。
- 容器 (Container)——又名 “组合 (Composite)”——是包含叶节点或其他容器等子项目的单位。 容器不知道其子项目所属的具体类, 它只通过通用的组件接口与其子项目交互。
容器接收到请求后会将工作分配给自己的子项目, 处理中间结果, 然后将最终结果返回给客户端。
- 客户端 (Client) 通过组件接口与所有项目交互。 因此, 客户端能以相同方式与树状结构中的简单或复杂项目交互。
优缺点
优点:
- 你可以利用多态和递归机制更方便地使用复杂树结构。
- 开闭原则。 无需更改现有代码, 你就可以在应用中添加新元素, 使其成为对象树的一部分。
缺点:
- 对于功能差异较大的类, 提供公共接口或许会有困难。 在特定情况下, 你需要过度一般化组件接口, 使其变得令人难以理解。
理解体会
组合模式再生活中其实非常常见,也是一种非常常见的是设计模式,文件系统就是有一种典型的树状结构。
对于绝大多数需要生成树状结构的问题来说, 组合都是非常受欢迎的解决方案。 组合最主要的功能是在整个树状结构上递归调用方法并对结果进行汇总。
合理利用好组合模式,就能掌握好树状结构相关的需求。
快速跳转链接
【概念解析】启动
【概念解析】Day 1 - 10
【概念解析】Day 11 - 20
【概念解析】Day 21 - 30
【概念解析】Day 31 - 40
【概念解析】Day 41 - 50
【概念解析】Day 51 - 60
【概念解析】Day 61 - 70
【概念解析】Day 71 - 80
【概念解析】Day 81 - 90
- 作者:eachenkuang
- 链接:https://kuangyichen.com/article/industry-day35
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。