1. 改写示例

在添加子组件的方法实现中,加入对父组件的引用实现。在删除子组件的方法实现中,加入把被删除的商品类别对象的父商品类别,设置成为被删除的商品类别的子类别的父商品类别的功能。实现新的返回组件的子组件对象的功能。

 public class Composite extends Component{public void addChild(Component child) {//延迟初始化if (childComponents == null) {childComponents = new ArrayList<Component>();}childComponents.add(child);//添加对父组件的引用child.setParent(this);}public void removeChild(Component child) {if (childComponents != null) {//查找到要删除的组件在集合中的索引位置int idx = childComponents.indexOf(child);if (idx != -1) {//先把被删除的商品类别对象的父商品类别,//设置成为被删除的商品类别的子类别的父商品类别for(Component c : child.getChildren()){//删除的组件对象是本实例的一个子组件对象c.setParent(this);//把被删除的商品类别对象的子组件对象添加到当前实例中childComponents.add(c);}//真的删除childComponents.remove(idx);}}      }

2. 环状引用

//todo

3. 总结

  • 如果你想表示对象的部分—整体层次结构,可以选用组合模式,把整体和部分的操作统一起来,使得层次结构实现更简单,从外部来使用这个层次结构也容易。

  • 如果你希望统一地使用组合结构中的所有对象,可以选用组合模式,这正是组合模式提供的主要功能。

  • 组合模式和装饰模式:这两个模式可以组合使用。

    • 装饰模式在组装多个装饰器对象的时候,是一个装饰器找下一个装饰器,下一个再找下一个,如此递归下去。其实这种结构也可以使用组合模式来帮助构建,这样一来,装饰器对象就相当于组合模式的Composite对象了。
    • 要让两个模式能很好地组合使用,通常会让它们有一个公共的父类。因此装饰器必须支持组合模式需要的一些功能,比如,增加、删除子组件等。

《研磨设计模式》chap15 组合模式(2)改写示例+总结相关推荐

  1. 研磨设计模式 之 组合模式(Composite) 3——跟着cc学设计系列

    15.3  模式讲解 15.3.1  认识组合模式 (1)组合模式的目的 组合模式的目的是:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作. 实现这个目标的关键之处,是设计一 ...

  2. 研磨设计模式 之 组合模式(Composite) 2——跟着cc学设计系列

    15.2  解决方案 15.2.1  组合模式来解决 用来解决上述问题的一个合理的解决方案就是组合模式.那么什么是组合模式呢? (1)组合模式定义 (2)应用组合模式来解决的思路 仔细分析上面不用模式 ...

  3. 研磨设计模式之 策略模式--转

    http://www.uml.org.cn/sjms/201009092.asp 研磨设计模式之 策略模式   2010-09-09 作者:云飞龙行 来源:云飞龙行的blog   先感谢众多朋友的支持 ...

  4. 1、【设计模式】组合模式

    java设计模式之组合模式 [学习难度:★★★☆☆,使用频率:★★★★☆]  树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式 ...

  5. 组合模式详解附有代码案例分析(包含透明组合模式、安全组合模式的代码示例)

    组合模式 一.组合模式的概念和角色 (一).组合模式的概念 (二).组合模式的角色 二.组合模式的应用场景 三.透明组合模式的代码示例 四.安全组合模式的代码示例 五.组合模式的优缺点 (一).优点 ...

  6. java设计模式之组合模式(树形层级)

    java设计模式之组合模式 学习难度:★★★☆☆,使用频率:★★★★☆]  树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式来 ...

  7. 研磨设计模式之外观模式(Facade)(解决方案)

    3.2  解决方案 3.2.1  外观模式来解决 用来解决上述问题的一个合理的解决方案就是外观模式.那么什么是外观模式呢? (1)外观模式定义 这里先对两个词进行一下说明,一个是界面,一个是接口. 界 ...

  8. 每天一个设计模式之组合模式

    作者按:<每天一个设计模式>旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现.诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) ...

  9. 详解设计模式:组合模式

    组合模式(Composite Pattern),又叫部分整体模式,是 GoF 的 23 种设计模式中的一种结构型设计模式. 组合模式 是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组 ...

最新文章

  1. python绘制分组条形图_python中分组值的条形图
  2. 【详细解析】7-1 两个有序序列的中位数 (25 分)
  3. android真机单元测试,Android 单元测试入门
  4. 中国地区Win10免费升级活动正式结束
  5. [NOI2014]动物园
  6. [Java] 蓝桥杯ADV-92 算法提高 求最大公约数
  7. Spring JdbcTemplate 调用 Oracle 存储过程 与 Oracle 驱动下载
  8. 实现图片抠图,拖拽验证功能
  9. 一 破解windows7系统密码
  10. Ubuntu使用ZTE MF832S上网卡拨号上网
  11. 手游传奇架设教程_传奇手游战神引擎架设教程
  12. java 斜率求角度_计算两条线之间的角度而不必计算斜率? (Java)
  13. android 脚本不被杀死,fgo用自动刷脚本会不会封号无需安卓
  14. javaEE---CSS
  15. 付费学习,花钱比意志力靠谱
  16. Web性能测试基本性能指标及案例分析
  17. R语言 NetCoMi包 Co-occurrence网络图 微生物16S 网络比较 核心物种
  18. MTK DTS 文件配置
  19. 关于服务器的负载和CPU的使用率
  20. 大学python作业_python(易知大学作业) - 随笔分类 - DGX杂学 - 博客园

热门文章

  1. Java数字反转(编程题)
  2. quantrader和matlab不匹配,【Matlab量化投资】支持向量机择时策略
  3. Linux下按扇区读写块设备,Linux下按扇区读写块设备
  4. 计算机启动操作系统的过程,操作系统启动过程
  5. 1000亿,行业巨头纷纷押宝的数据中心
  6. UPS对发电机组的影响
  7. is属性用法 vue_vue组件讲解(is属性的用法)模板标签替换操作
  8. Cloud Computing:云网端融合的简介、层次、典型代表、未来趋势之详细攻略
  9. Python命令行解析:IDE内点击Run运行代码直接得出结果、基于TF flags(或argparse、sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果
  10. Sklearn中的CV与KFold详解