开头
今天我们学习一下组合模式,一说到组合两个字你会想到什么呢?UML关系中的组合关系?图片和拼图?文件夹和文件?列表和节点?在学习组合模式之前我觉得很有必要复习一下组合关系和聚合关系的区别?
组合关系:整体和部分的关系,有了整体才有部分,部分不能脱离整体存在。
例子:列表可以包含0或多个节点,一个节点只属于一个列表。一个文件夹里面可以创建文件,一个文件只属于这个文件夹里面。(有点勉强)
聚合关系:整体和部分关系,部分可以单独存在。
例子:一个火车包含一个或者多个引擎,一个引擎属于0个或者多个火车
内容
今天我们学习的组合模式,也是一种整体—部分的层次结构。我们大致可以将组合模式分为三类对象:分别为:抽象构件(Component)、Leaf(叶子构件)、Composite(容器构件)
抽象构件(Component):可以是接口或者抽象类,是叶子构件和容器构件的接口,包含子类行为的声明和实现。
Leaf(叶子构件):叶子节点没有子节点,实现了抽象构件定义的行为,但是访问及管理子构件的方法,通过异常等方式处理,也就是说,一个列表有一个节点,节点已经是最低级的了,节点就不可以再有节点。一棵树长出了一个叶子,叶子是不可以长长出叶子的。
Composite(容器构件):容器构件中含所有子节点,节点可以是子节点,也可以是容器节点,是一个集合,用来存储节点的。好比一个文件夹,文件夹好比一个容器,用来提供一个容器,它实现了抽象构件定义的行为方法,也可以调用子节点的方法。
抽象构件
叶子构件
容器构件
客户端
总结
组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,是一种对象结构型模式 |
优点:
(1)可详细的定义分层次的复杂对象,用户可以忽略层次的差异。
(2)基本对象可以被组合成复杂组合对象,这个组合对象也可以被组合,这样不断递归,客户端调用基本对象的地方都可以使用组合对象。
(3)方便将新的叶子构件放入容器构件中。
缺点:层次关系的出现使得设计复杂。
适用场景:
表示一个对象整体—部分的层次结构。
今天的学习就先到这里吧,关于组合模式目前的了解的还不是很全面,总有一点过意不去的地方,希望和小伙伴们一起学习,如果本篇博客对于初学者的您有一定的帮助,请记得点赞哦。