结构型模式之组合模式

(复习用,不适合初学。复习用,不适合初学。复习用,不适合初学。)

  1. 定义(Composite Pattern):组合多个对象形成树结构以表示“整体-部分”的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。(Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.)

  2. 角色:
    ①Component(抽象构件)
    抽象构件可以是接口或抽象类,为叶子构件和容器构件对象声明接口,在该角色中可以包含所有子类共有行为的声明和实现。
    ②Leaf(叶子构件)
    叶子构件在组合结构中表示叶子节点对象,叶子节点没有子节点,他实现了在抽象构件中定义的行为。对于那些访问及管理子构件的方法,可以通过异常等方式处理。(即图中的add/remove/getChild三个方法)
    ③Composite(容器构件)
    容器构件在组合结构中表示容器节点对象,容器节点包含子节点,其子节点可以是叶子节点,也可是容器节点,它提供一个集合用于存储子节点,实现了在抽象构件中定义的行为,包括那些访问及管理子构件的方法,在业务方法中可以递归调用其子节点的业务方法。

  3. 解决方案(类图)

    组合模式类图

  4. 优缺点
    ①优点:
    (1)组合模式可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,使得增加新构件也更容易,因为它让客户端忽略了层次的差异,而它的结构又是动态的,提供了对象管理的灵活接口,因此组合模式可以方便地对参差结构进行控制。
    (2)客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关心自己处理的是单个对象还是整个组合结构,简化了客户端代码。
    (3)定义了包含叶子对象和容器对象的类层次结构,叶子对象可以被组合成更复杂的容器对象,而这个容器对象哟可以被组合,这样不断递归下去,可以形成复杂的树形结构。
    (4)更容易在组合体内加入对象构件,客户端不必因为加入了新的对象构件而更改原有代码。
    ②缺点:
    (1)使设计变得更加抽象,对象的业务规则如果很复杂,则实现组合模式具有很大挑战型,而且不是所有的方法都与叶子对象子类有关联。
    (2)增加新构件是可能会产生一些问题,很难对容器中的构件类型进行限制。有时候我们希望一个容器中只能有某些特定类型的对象,使用组合模式时,不能依赖类型系统来施加这些约束,因为他们都来自相同的抽象层,在这种情况下,必须通过在运行时进行类型检查来实现,这个过程较为复杂。

  5. 适用环境
    ①需要表示一个对象整体或部分层次,在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,可以一致地对待它们。
    ②让客户能够忽略不同对象层次的变化,客户端可以针对抽象构件编程,无需关心对象层次结构的细节。
    ③对象的结构是动态的并且复杂程度不一样,但客户需要一致地处理它们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值