组合模式

2025年8月18日 | 4 分钟阅读

复合模式指出,只需“允许客户端以通用方式操作可能或可能不代表对象层次结构的对象”。

复合设计模式的优势

  • 它定义了包含原始对象和复杂对象的类层次结构。
  • 它使您更容易添加新类型的组件。
  • 它提供了结构灵活性以及可管理类或接口。

复合模式的用法

它被用于

  • 当您想表示对象的一个完整或部分层次结构时。
  • 当需要将职责动态添加到单个对象而不影响其他对象时。对象的职责可能随时间变化。

复合模式的 UML 图

Composite Pattern UML 1

复合模式中使用的元素

让我们看看复合模式的 4 个元素。

1) 组件
  • 声明组合中对象的接口。
  • 为所有类通用的接口实现适当的默认行为。
  • 声明用于访问和管理其子组件的接口。
2) 叶子
  • 表示组合中的叶子对象。叶子没有子节点。
  • 定义组合中原始对象的行为。
3) 复合
  • 定义具有子节点的组件的行为。
  • 存储子组件。
  • 在组件接口中实现与子节点相关的操作。
4) 客户端
  • 通过组件接口操作组合中的对象。

注意:上述一般 UML 的工作流程如下。

客户端使用组件类接口与组合结构中的对象交互。如果接收者是叶子,则请求将直接处理。如果接收者是复合对象,则它通常会将请求转发给其子节点以执行附加操作。


复合模式的例子

我们可以通过下面给出的 UML 图轻松理解复合设计模式的例子

Composite Pattern UML 2

上述 UML 的实现

步骤 1

创建一个 Employee 接口,该接口将被视为一个 组件。

步骤 2

创建一个 BankManager 类,该类将被视为一个 复合对象并实现 Employee 接口。

文件:BankManager.java

步骤 3

创建一个 Cashier 类,该类将被视为一个 叶子,并且它将实现 Employee 接口。

文件:Cashier.java

步骤 4

创建一个 Accountant 类,该类也将被视为一个 叶子,并且它将实现 Employee 接口。

文件:Accountant.java

步骤 5

创建一个 CompositePatternDemo 类,该类也将被视为一个 客户端,并且它将使用 Employee 接口。

文件:CompositePatternDemo.java

输出

下一个主题装饰器模式