跳到主要内容

组合模式

定义

组合模式最初只是用于解决树形结构的场景,更多的是处理对象组织结构之间的问题。而组合关系则是通过将不同对象起来完成一个功能。

组合模式(Composite Pattern)的定义是:将对象组合成树形结构以表示整个部分的层次结构,组合模式可以让用户统一对待单个对象和对象的组合。

比如:windows 操作系统中的目录结构,其实就是树形目录结构,通过

文件夹和文件的共性特征是都可以被放入文件夹,所以可以将文件夹和文件当成同一类对象去看待

组合模式可以让客户端统一单个对象(文件)和组合对象(文件夹)的逻辑处理(递归遍历),组合模式更像是一种数据结构和算法的抽象。

模式原理

组合模式中一共有三个角色:

  • Component(抽象根节点): 定义了系统各层次之间共有的方法和属性(所有子类),声明了组合中对象的通用接口。

  • Composite(树枝节点): 实现了根节点中定义的行为,其中有一个集合可以用于存储子节点,表示。

  • Leaf(叶子节点): 叶子节点下没有其它分支,是系统层次遍历的最小单位。

应用实例

总结

优点

  • 组合模式可以清楚地定义分层次的复杂对象,表示对象的全部或部分,它让客户端忽略了层次的差异,方便对整个层次结构进行控制。
  • 客户端可以一致地使用一个组合结构或其中单个对象,不必关心处理的是单个对象还是整个组合结构,简化了客户端代码。
  • 在组合模式中添加新的树枝节点和叶子节点都很方便,无需对现有类库进行任何修改,符合 “开闭原则“
  • 组合模式为树形结构的面向对象实现提供了一种灵活的解决方案,遇到叶子节点和树枝节点的递归组合,可以形成复杂的树形结构,但对树形结构的控制却非常简单。

缺点

使用组合模式的前提在于,业务场景必须能够表示成树形结构。所以,使用场景比较局限,并不是一种常用的设计模式。

适用场景

  • 处理一个树形结构,比如,公司人员组织架构、订单信息等;
  • 跨越多个层次结构聚合数据,比如,统计文件夹下文件总数。
  • 统一处理一个结构中的多个对象,比如,遍历文件夹下所有 XML 类型文件内容。