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时,你不能依赖类型系统施加这些约束,而必须在运行时检查。

     

  • 相关阅读:
    Hologres如何支持亿级用户UV计算
    飞猪基于 Serverless 的云+端实践与思考
    高德打车构建可观测性系统实践
    程序员写好技术文章的几点小技巧
    配置审计(Config)变配报警设置
    进入中国内地第31年的麦当劳 ,为什么还能不断吸引新消费人群?
    OceanBase再破纪录!核心成员陈萌萌:坚持HTAP就是坚持我们做数据库的初心
    找出有序数组中缺失的数字
    删除值重复的结点
    想交链表----若有缘 必相见
  • 原文地址:https://www.cnblogs.com/dirt2/p/composite.html
Copyright © 2011-2022 走看看