设计模式系列----组合模式理解
对于这个模式,我感觉先给大家讲一下应用场景会比较好,不然可能会比较懵。
1.组合模式最简单理解
组合模式:树状结构。除了叶子节点以外的节点,都包含一个list结构,存储其包含的下级节点。
看到这里,是否感觉好理解一点了,最最最典型的应用就是文件系统了(反正我是看到这句话才突然理解了组合模式)。文件系统由文件和目录组成,每个文件里装有内容,而每个目录的内容可以有文件和目录,目录就相当于是由单个对象或组合对象组合而成,如果你想要描述的是这样的数据结构,那么你就可以使用组合模式。
2.应用场景:
1.你想表示对象的部分-整体层次结构,如树形菜单,文件、文件夹的管理。文件系统由文件和目录组成,每个文件里装有内容,而每个目录的内容可以有文件和目录,目录就相当于是由单个对象或组合对象组合而成,如果你想要描述的是这样的数据结构,那么你就可以使用组合模式。
2.算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。
3.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
比如公司架构图中,所与人都是员工,但是部分员工是管理者,而且有些管理者还可以管理其他管理者和员工(想想目录和文件的关系)
3.组合模式的深层理解
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。
举个代码例子吧:
公司的人员分布图如下:
我们注意到人员结构中有两种结构,一是管理者,如老板,PM,CFO,CTO,二是职员。其中有的管理者不仅仅要管理职员,还会管理其他的管理者。这就是一个典型的整体与部分的结构。
如果不使用组合模式
代码如下:
如果要形成树形结构,就要如下代码:
缺陷:
1、position字段,job 字段,work 方法重复了。
2、管理者对其管理的管理者和职员需要区别对待。
如果使用了组合模式
组合模式最主要的功能就是让用户可以一致对待整体和部分结构,将两者都作为一个相同的组件,所以我们先新建一个抽象的组件类:
如果要形成树形结构,就要如下代码:
最主要的就是代码变得更加优雅,可读性更强了,冗余代码没有了,组合模式就是用于树形结构的构建,但是用到的不算多。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~