组合模式(一)

145 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情

首先说明,组合模式也属于一种结构型设计模式,我们在开发中使用它时,主要是为了它的一个最重要的功能:可以将对象组合成树状结构,并且能像使用独立对象一样使用它们。

在日常开发中我们会发现,组合模式的使用频率并不是太高。但是一旦组合模式出现了,那么也说明了如果想要解决这个问题,不使用组合模式的话,那么将会比较困难。这么说可能不是很好理解,接下来我们进行一步一步的分析。

使用场景

首先我们说明一下使用场景(带着问题去看介绍会比较容易进入思考的状态):

  1. 在我们的程序结构有类似“倒着的树”一样的层级关系时可以考虑使用。例如文件系统,部门组织架构。
  2. 在我们要使用统一的方式操作单个对象,或者由这些对象组成的组合的对象的时候。

这两个场景也是组合模式可以发挥其最主要特点的场景。接下来我们介绍组合模式的相关概念及使用方式。

组合模式的概念

对于组合模式,有的时候又被称为整体-部分模式,顾名思义,它的作用重点在将部分 组合成 整体

其实更具体地来说,它可以将对象组合成树状的层次结构,这样就可以用来表示“整体-部分”之间的关系,使用户对单个对象或者组合的对象具有一致的访问性。也就是说,访问组合的对象和访问单个对象对用户来说没有什么区别。

组合模式的优缺点

组合模式有很多优点,具体如下:

  1. 对于组合模式来说,它可以使得客户端代码能以统一的方式处理单个对象或者组合的对象,无须关心自己处理的是单个对象,还是组合对象,这样对于客户端来说就会比较简单。
  2. 通过以上的说明,我们也可以得到一个推论,就是它更容易在组合体内加入新的对象,同时客户端不会因为加入了新的对象而更改已有代码,它是“开闭原则”的一个很好的例子。

有明显的有点相对应的是它也有一些缺点,主要为:

  1. 首先就是组合模式的设计较复杂,客户端需要花更多时间理清类之间的层次关系;
  2. 另外组合模式不容易使用继承的方式来增加构件的新功能

对于这些我们在之后的叙述中详细地分析。

总结

这篇文章主要是在文字上对组合模式做了详细的介绍,使读者对组合模式有一个初步的认知。接下来我们将会分析组合模式如何使用。