设计模式系列----组合模式理解

组合模式是一种结构型设计模式,用于表示对象的层次结构。它让客户可以一致地处理单个对象和对象组合,简化了树形结构的构建与操作。文件系统、公司组织结构和算术表达式等都是组合模式的典型应用场景。通过创建一个抽象组件类,组合模式消除了冗余代码,提高了代码的可读性和优雅性。在不使用组合模式时,需要分别处理管理者和职员,而使用后则能统一管理,降低了复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于这个模式,我感觉先给大家讲一下应用场景会比较好,不然可能会比较懵。

1.组合模式最简单理解

       组合模式:树状结构。除了叶子节点以外的节点,都包含一个list结构,存储其包含的下级节点
       看到这里,是否感觉好理解一点了,最最最典型的应用就是文件系统了(反正我是看到这句话才突然理解了组合模式)。文件系统由文件和目录组成,每个文件里装有内容,而每个目录的内容可以有文件和目录,目录就相当于是由单个对象或组合对象组合而成,如果你想要描述的是这样的数据结构,那么你就可以使用组合模式。

2.应用场景:

1.你想表示对象的部分-整体层次结构,如树形菜单,文件、文件夹的管理。文件系统由文件和目录组成,每个文件里装有内容,而每个目录的内容可以有文件和目录,目录就相当于是由单个对象或组合对象组合而成,如果你想要描述的是这样的数据结构,那么你就可以使用组合模式。
2.算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。
3.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
比如公司架构图中,所与人都是员工,但是部分员工是管理者,而且有些管理者还可以管理其他管理者和员工(想想目录和文件的关系)

3.组合模式的深层理解

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。

举个代码例子吧:

公司的人员分布图如下:
在这里插入图片描述
我们注意到人员结构中有两种结构,一是管理者,如老板,PM,CFO,CTO,二是职员。其中有的管理者不仅仅要管理职员,还会管理其他的管理者。这就是一个典型的整体与部分的结构。

如果不使用组合模式

代码如下:
在这里插入图片描述

在这里插入图片描述
如果要形成树形结构,就要如下代码:
在这里插入图片描述

缺陷

1、position字段,job 字段,work 方法重复了。
2、管理者对其管理的管理者和职员需要区别对待。

如果使用了组合模式

组合模式最主要的功能就是让用户可以一致对待整体和部分结构,将两者都作为一个相同的组件,所以我们先新建一个抽象的组件类:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
如果要形成树形结构,就要如下代码:
在这里插入图片描述
最主要的就是代码变得更加优雅,可读性更强了,冗余代码没有了,组合模式就是用于树形结构的构建,但是用到的不算多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三七有脾气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值