组合模式

作者: 程序亦非猿 | 来源:发表于2016-07-26 22:00 被阅读143次

    组合模式

    组合(Composite)模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

    组合模式比较复杂一些,跟迭代器模式配合威力强大。

    类图

    树形结构:

    带子元素的元素称为 『节点』(node)

    没有子元素的元素称为 『叶节点』(leaf)

    包含其他组件的组件为『组合对象』,没有包含其他组件的组件为『叶节点对象』

    任何一个『节点』和『叶节点』都是一种『组合』。

    注意点

    组合模式让我们能用树型方式创建对象的结构,树里面包含了组合以及个别的对象。
    使用组合结构,我们能把相同的操作应用在组合和个别对象上。换句话说,在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。

    使用组合模式的时候,Component需要包含LeafComposite,以致于它们都会包含一些自己不需要的方法,所以可能在不需要的方法里throw UnsupportedOperationExecption 或者 返回nullorfalse

    并且这么做,其实是不符合单一职责原则的,但是这么做能换来『透明性』(transparency): 通过让组件的接口同时包含一些管理子节点和页节点的操作,客户就可以将组合和叶节点一视同仁。也就是说,一个元素究竟是组合还是叶节点,对客户是透明的。

    要点

    1. 组合模式提供一个结构,可同时包含个别对象和组合对象。
    2. 组合模式允许客户对个别对象以及组合对象一视同仁。
    3. 组合结构内的任意对象成为组件,组件可以是组合,也可以是叶节点。
    4. 实现组合模式时,有许多设计上的折中。你要根据需要平衡透明性和安全性。

    小结

    组合最大的优势是:让客户端更加简单,客户端不需要再操心面对的是组合对象还是叶节点对象,所以不需要写一大堆if语句来保证他们对正确的对象调用了正确的方法。通常,他们只需要对整个结构调用一个方法并执行操作就可以了。

    相关文章

      网友评论

        本文标题:组合模式

        本文链接:https://www.haomeiwen.com/subject/zzxojttx.html