2.3 组合模式

组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。

最理想的例子是树, 每次调用树的Add()方法来为他添加新的叶子节点.

组合模式有透明组合模式安全组合模式, 透明组合模式要叶子节点也实现枝子节点的方法, 如Add和delete, 但是实现是没有意义的, 因此要做异常处理; 安全组合模式让枝子节点单独去继承组合模式, 然后自己去实现管理方法, 但是这种方法大大增加了实现的复杂性.

角色有:

  • 抽象构件(定义了一些公共接口, 叶子构件和容器构件都要实现)
  • 叶子构件
  • 容器构件(里面可以有容器构件, 也可以是叶子构件)

优点: 清晰分层次地表达对象, 让客户忽略层次差异; 符合开闭原则;
缺点: 叶子构件/ 容器构件的行为受限, 因为他们来自于相同的抽象构件, 因此如果要使用特定的方法, 那么就要在运行的时候判断对象类型.

你可能感兴趣的:(2.3 组合模式)