组合模式

模式描述

将对象组合成树形结构,以表示成”部分-整体“的层次结构。

优点

  1. 简化 Client 代码;
  2. 使得设计更一般化;

缺点

  1. 使用比较局限;

应用场景

  1. 表示”部分-整体“的层次结构;
  2. 统一使用组合结构中的所有对象
DATE CHANGELOG
2023年5月7日 初始化

UML 类图

classDiagram
class Component {
	<<interface>>
	operation()
	add(Component c)
	remove(Component c)
	getChild(int)
}

class Composite {
    operation()
	add(Component c)
	remove(Component c)
	getChild(int)
}
Component <|.. Composite
Composite o.. Composite

class Leaf {
    operation()
}

Component <|.. Leaf
Component <-- Client

参与者

Component

  • 定义 Client 需要的方法;
  • 适当情况下,提供默认实现;
  • 声明访问和管理 Component 操作;

Composite

  • Component 的实现;
  • 存储子 Component;
  • 实现 Component 中与子 Component 有关的操作;

Leaf

  • 叶子节点,没有子 Component;

Client 类

客户端。

数据流

  1. Client 仅仅与 Component 进行交互;

相关模式

  • 职责链模式:通常”部分-整体“的连接使用职责链模式;
  • 装饰模式:通常与组合模式一起使用,它们有公共的父类。
  • 享元模式:共享组件;
  • 迭代器模式:通常用来遍历组合模式;
  • 访问者模式:将分布在 Composite 和 Leaf 类中的操作和行为局部化;

补充

  • 数据可以使用组合模式来表示,业务需求可以通过在树上的递归遍历算法来实现。

示例代码

golang

java