博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
组合模式(Composite Pattern)
阅读量:6985 次
发布时间:2019-06-27

本文共 850 字,大约阅读时间需要 2 分钟。

组合模式主要用来处理一类具有“容器特征”的对象——即它们在充当对象的同时,又可以作为容器包含其他多个对象。

组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。

组合模式中涉及到三个角色:

  • 抽象构件(Component)角色:这是一个抽象角色,上面实现中Graphics充当这个角色,它给参加组合的对象定义出了公共的接口及默认行为,可以用来管理所有的子对象(在透明式的组合模式是这样的)。在安全式的组合模式里,构件角色并不定义出管理子对象的方法,这一定义由树枝结构对象给出。
  • 树叶构件(Leaf)角色:树叶对象时没有下级子对象的对象,上面实现中Line和Circle充当这个角色,定义出参加组合的原始对象的行为
  • 树枝构件(Composite)角色:代表参加组合的有下级子对象的对象,上面实现中ComplexGraphics充当这个角色,树枝对象给出所有管理子对象的方法实现,如Add、Remov等。

                                      透明式的组合模式类图

                               安全式组合模式的类图

 

      组合模式可以适用以下情形:

  ◊ 希望把对象表示成部分—整体层次结构;

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

  组合模式具有以下特点:

  ◊ 定义了包含基本对象和组合对象的类层次结构。基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,不断的递归下去。客户代码中,任何用到基本对象的地方都可以使用组合对象;

  ◊ 简化客户代码。客户可以一致地使用组合结构和单个对象。这样用户就不必关心处理的是一个叶子节点还是一个组合组件,从而简化了客户代码;

  ◊ 使得新增类型的组件更加容易。新定义的Composite或Leaf子类自动地与已有的结构和客户代码一起协同工作,客户程序不需因新的Component类而改变。

转载于:https://www.cnblogs.com/ctddjyds/p/5899979.html

你可能感兴趣的文章
业务分析之--权限管理
查看>>
稳健的漫步~~~
查看>>
取得NSDate实例各个字段的数字
查看>>
Laravel 5.2问题-----postman进api的post请求,为什么出现Forbidden?
查看>>
vs2013update4 vs-mda-remote cordova真机测试ios
查看>>
Mangos源码分析(3):服务器结构探讨之简单的世界服实现
查看>>
快手,抖音,美拍打造个人IP精准引流!
查看>>
2015年最新数据库流行排行榜
查看>>
企业Java应用服务器之JBoss7.1与Apahce整合
查看>>
临时数据库之python用sqlite3模块操作sqlite
查看>>
苏宁开启“易购”时代,智慧零售、***零售、新零售乱战江湖
查看>>
理解矩阵 [转]
查看>>
css控制的个性导航栏
查看>>
C#_卸载快捷方式添加(转)
查看>>
半解TextBox灵异事件背后神秘的深度灵异事件
查看>>
Defense hash algorithm collision 防御hash算法冲突导致拒绝服务器
查看>>
cocos2d 入门必备4个基本概念
查看>>
vim配置
查看>>
布局xml 转 view
查看>>
Boghe连接FreeSwitch的配置
查看>>