《设计模式之禅》之组合模式

一、组合模式的定义

组合模式也叫合成模式,有时又叫做部分-整体模式,主要用来描述部分与整体的关系,其定义如下:
将对象组合成的树形结构以表示”部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

组合模式的几个角色:

(1)Component抽象构件角色

定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性

(2)Leaf叶子构件

叶子对象,其下再也没有其他的分支,也就是遍历的最小单位。

(3)Composite树枝构件

树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构。

二、组合模式的应用

1.组合模式的优点

(1)高层模块调用简单

一棵树形机构中的所有节点都是Component,局部和整体对调用者来说没有区别,也就是说,高层模块不必关心自己处理的是单个对象还是整个组合结构,简化了高层模块的代码。

(2)节点自由增加

使用了组合模式后,我们可以看看,如果想增加一个树枝节点是不是都很容易,只要找到它的父节点就成,非常容易扩展,符合开闭原则,对以后的维护非常有利。

2.组合模式的缺点

组合模式又一个非常明显的缺点,直接使用实现类,这在面向接口编程上是很不恰当的,与依赖倒置原则冲突,使用时要考虑清楚,它限制了接口的影响范围。

3.组合模式的使用场景

  • 维护和展示部分-整体关系的场景,如树形菜单、文件和文件夹管理
  • 从一个整体中能够独立出部分模块或功能的场景

4.组合模式的注意事项

(1)只要是树形结构,就要考虑使用组合模式;

(2)只要是体现局部和整体的关系,而且关系还比较深,考虑一下组合模式;

三、组合模式的扩展

1.真实的组合模式

什么是真实的组合模式?

就是你在实际项目中使用的组合模式,而不是仅仅依照书本上学习到的模式,它是”实践出真知”。

2.透明的组合模式

组合模式有两种不同的实现:透明模式和安全模式。

四、最佳实践

组合模式在项目中到处都有。

比如:

(1)页面结构一般都是上下结构,上面放系统的Logo,下边分为两部分:左边是导航菜单,右边是展示区,左边的导航菜单一般都是树形的结构。

(2)常用的XML结构也是一个树形结构,根节点、元素节点、值元素这些都与我们的组合模式相匹配。

(3)我们自己本身也是一个树形结构,比如根据喔找到我的父母,根据父亲能找到爷爷奶奶,根据母亲找到外公外婆,很典型的树形结构。

代码例子:
https://github.com/developers-youcong/DesignPatternPractice/tree/master/Combination

文章目录
  1. 1. 一、组合模式的定义
    1. 1.1. 组合模式的几个角色:
      1. 1.1.1. (1)Component抽象构件角色
      2. 1.1.2. (2)Leaf叶子构件
      3. 1.1.3. (3)Composite树枝构件
  2. 2. 二、组合模式的应用
    1. 2.1. 1.组合模式的优点
      1. 2.1.1. (1)高层模块调用简单
      2. 2.1.2. (2)节点自由增加
    2. 2.2. 2.组合模式的缺点
    3. 2.3. 3.组合模式的使用场景
    4. 2.4. 4.组合模式的注意事项
  3. 3. 三、组合模式的扩展
    1. 3.1. 1.真实的组合模式
    2. 3.2. 2.透明的组合模式
  4. 4. 四、最佳实践
    1. 4.1. (1)页面结构一般都是上下结构,上面放系统的Logo,下边分为两部分:左边是导航菜单,右边是展示区,左边的导航菜单一般都是树形的结构。
    2. 4.2. (2)常用的XML结构也是一个树形结构,根节点、元素节点、值元素这些都与我们的组合模式相匹配。
    3. 4.3. (3)我们自己本身也是一个树形结构,比如根据喔找到我的父母,根据父亲能找到爷爷奶奶,根据母亲找到外公外婆,很典型的树形结构。