第12章 组合模式

组合模式是一种设计模式,它将多个对象组织成树形结构,使得单个对象和组合对象能被同样处理。这种模式允许客户端无差别地交互,无论是与独立的对象还是组合对象。它定义了抽象构件来统一叶子对象(无子节点)和容器对象(有子节点),并支持递归调用来处理复杂的层次结构。组合模式的优点在于简化客户端代码,允许动态扩展结构,但可能在处理复杂业务规则时带来挑战。
摘要由CSDN通过智能技术生成

第12章 组合模式

 

组合多个对象形成树形结构以表示“部分——整体”的结构层次,对单个对象(叶子)和组合对象(容器)的使用具有一致性。

1.要点

  • 树形结构:容器、叶子
  • 容器构件:集合、聚合关联(引入抽象类)、递归调用
  • 组合模式:透明/安全

2.模式动机

将容器对象和叶子对象进行递归组合,使用户在使用时无需对它们进行区分,可以一致地对待容器对象和叶子对象。

3.四个角色

  • 抽象构件(Component):接口/抽象类,可包含所有子类共有行为的声明和实现,定义访问及管理它的子构件的方法。
  • 叶子构件(Leaf):表示叶子节点对象(没有子节点),实现在抽象构件中定义的行为。对于访问和管理子构件的方法,可以通过异常等方式处理。
  • 容器构件(Composite):表示容器节点对象(包含子节点),实现抽象构件中定义的行为,包括访问和管理子构件的方法,在其业务方法中递归调用其子节点的业务方法。
  • 客户类(Client):通过抽象构件接口访问和控制组合构件中的对象。

4.优点

  • 方便对层次结构进行控制
  • 客户端一致调用组合结构或其中单个对象,简化客户端代码
  • 叶子对象可以被组合成更复杂的容器对象,容器对象有可以被组合,可以形成复杂的树形结构
  • 更容易在组合体内加入对象构件,客户端不必因为加入了新对象构件而更改原有代码

5.缺点

  • 抽象,如果业务规则复杂则很具挑战性,不是所有方法都与叶子对象子类有关联
  • 增加新构件可能产生问题,难以对容器中的构件类型进行限制

6.适用环境

  • 需要表示一个对象的整体或部分层次,在具有整体和部分的层次结构中,希望一致对待
  • 让客户端忽略不同对象的层次变化,针对抽象构件编程,无需关心细节
  • 对象结构动态且复杂程度不一样,客户需要一致处理

7.扩展

透明组合模式:叶子、容器操作一致,不安全

安全组合模式:区别对待叶子、容器,不向叶子对象提供管理成员对象的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值