zoukankan      html  css  js  c++  java
  • [设计模式]Composite(组合)——对象结构型模式

    1、意图

    将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

    2、动机

    Composite模式的关键是一个抽象类,它既可以代表图元,又可以代表图元的容器。Composite使用递归组合来进行实现。

    3、适用性

    1)想表示对象的部分-整体层次结构。

    2)希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

    4、结构

    5、参与者

    1)Component

    -为组合中的对象声明接口。

    -在适当的情况下,实现所有类共有接口的缺省行为。

    -声明一个接口用于访问和管理Composite的子组件。

    2)Leaf

    -在组合中表示叶节点对象,叶节点没有子节点。

    -在组合中定义图元对象的行为。

    3)Composite

    -定义有子部件的那些部件的行为。

    -存储子部件

    -在Component接口中实现与子部件有关的操作。

    4)Client

    -通过Component接口操纵组合部件的对象。

    6、协作

    用户使用Component类接口与组合结构中的对象进行交互。如果接收者是一个叶节点,则直接处理请求。如果接收者是Composite,它通常将请求发送给它的子部件,在转发请求之前/之后可能进行一些辅助操作。

    7、效果

    1)定义了包含基本对象和组合对象的类层次结构

    基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断递归下去。客户代码中,任何用到基本对象的地方都可以是组合对象。

    2)简化客户代码

    客户可以一致的使用组合结构和单个对象。通常用户不知道(也不关心)处理的是一个节点还是一个组合组件。这就简化了客户代码,因为在定义组合的那些类中不需要写一些充斥着选择语句的函数。

    3)使得更容易增加新类型的组件

    新定义的Composite或Leaf子类自动地与已有的结构和客户代码一起工作,客户程序不需要因新的Component类而改变。

    4)使你的设计更加一般化

    容易增加新组建也会产生一些问题,那就是很难限制组合中的组件。有时你希望有些组合只能有某些特定的组件。使用Composite时,你不能依赖类型系统施加这些约束,而必须在运行时检查。

     

  • 相关阅读:
    将kali linux装入U盘 制作随身携带的kali linux
    arch/manjaro linux configuration
    python资源

    JSP通过AJAX获取服务端的时间,在页面上自动更新
    Spark基础
    MapReduce基础
    HDFS基础
    C#输出杨辉三角形
    Java窗体居中显示的2种方法
  • 原文地址:https://www.cnblogs.com/dirt2/p/composite.html
Copyright © 2011-2022 走看看