组合模式定义

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

组合模式结构图

组合模式角色介绍

抽象构件角色,Component,一个普通业务构件,它可以是接口或抽象类,为叶子构件和容器构件对象声明接口。

叶子构件角色,Leaf,它在组合结构中表示叶子节点对象,叶子节点没有子节点,它实现了在抽象构件中定义的行为。对于那些访问及管理子构件的方法,可以通过异常等方式进行处理。

容器构件角色,Composite,它在组合结构中表示容器节点对象,容器节点包含子节点,其子节点可以是叶子节点,也可以是容器节点,它提供一个集合用于存储子节点,实现了在抽象构件中定义的行为,包括那些访问及管理子构件的方法,在其业务方法中可以递归调用其子节点的业务方法。

组合模式结构代码

抽象构件:

public interface Component {void operation();//向容器中添加构件void add(Component component);//从容器中删除构件void remove(Component component);//获取容器中的构件void getChild(int i);}

叶子构件:

public class Leaf implements Component {public void operation() {System.out.println("i am leaf");}public void add(Component component) {throw new RuntimeException("leaf do not support add");}public void remove(Component component) {throw new RuntimeException("leaf do not support remove");}public void getChild(int i) {throw new RuntimeException("leaf do not support getChild");}
}

容器构件:

public class Composite implements Component {private List<Component> componentList;public Composite() {this.componentList = new ArrayList<Component>();}//循环遍历容器内容所有构件,并对其进行操作public void operation() {for (Component c:componentList) {c.operation();}}public void add(Component component) {componentList.add(component);}public void remove(Component component) {componentList.remove(component);}public void getChild(int i) {componentList.get(i);}
}

客户端:

public class Client {public static void main(String[] args) {Component leaf = new Leaf();//操作叶子leaf.operation();Component composite = new Composite();composite.add(leaf);//操作容器composite.operation();}
}

组合模式运行机制

无论是叶子还是容器,都实现共同的组件接口;客户端面向组件接口编程,这样客户端在操作组件时就避免了叶子与容器的差异性;
叶子和容器的差异性,由各自内部实现体现,比如叶子实现操作容器的方法都是抛出异常的方式,容器实现业务逻辑operation方法时,通过遍历容器,把请求继续传递给容器内部的子构件。

组合模式解决的核心问题

组合模式让客户端可以无差异性的处理叶子和容器节点,完美处理树形递归结构。

组合模式-完美处理树形递归结构相关推荐

  1. Java设计模式中组合模式是什么/树形结构怎么组合或显示存储,编程怎么实现树形结构

    继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库Java设计模式克隆下载学习使用! 5.7 组合模式 5.7.1 概述 又名整体模式,是用于把一组相似的对象当作一个单一的对象 依据树形结构 ...

  2. 组合模式:输出树形结构

    1.节点类 namespace CombinationPattern {     /* 组合模式:当对象或系统之间出现部分与整体,或类似树状结构的      * 情况时,考虑组合模式.相对装饰模式来说 ...

  3. 组合模式 -- 树形结构处理

    树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题,组合模式通过一种巧妙的设计方案使得 ...

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

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

  5. 树形结构的处理——组合模式(二)

    11.2 组合模式概述 对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象)并调用执行,牵一而动百,其中使用了 ...

  6. 【设计模式】组合模式?建议改名叫树形模式!

    什么是组合模式(Composite) 概念 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及 ...

  7. 【学习设计模式11】树形处理——组合模式

    上篇: [学习设计模式10]分离抽象与实现--桥接模式_Aiky哇的博客-CSDN博客上篇:[学习设计模式9]兼容扩展坞-适配器模式_Aiky哇的博客-CSDN博客上篇:[学习设计模式8]组装流水线- ...

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

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

  9. 设计模式笔记九:组合模式

    原文:http://www.runoob.com/design-pattern/ 少许个人理解,如有错误请指出.欢迎一起讨论. 组合模式(Composite Pattern) 又叫部分整体模式,是用于 ...

  10. 设计模式学习笔记(十一)-组合模式

    树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题,组合模式通过一种巧妙的设计方案使得 ...

最新文章

  1. url中去掉index.php,方便redirect()
  2. ENAS加载自己的数据集之路
  3. 计算机教学与课程论专业,东北师范大学专业介绍:计算机课程与教学论
  4. mysql工_mysql
  5. ReactJS入门之组件
  6. java动态sql执行数据
  7. 现在JavaScript日期–如何在JavaScript中获取当前日期
  8. 闲鱼如何利用端计算提升推荐场景的ctr
  9. RocketMQ(七)——消息的消费
  10. Ettus Research USRP B200/B210 simple case
  11. iview select 内存泄漏_Vue遇到的内存泄漏排查处理
  12. 北上广,是程序员最好的归宿?
  13. 【基础】PHP变量及变量作用域
  14. 六面体单元matlab后处理,《有限元基础教程》_【MATLAB算例】基于节点六面体单元的空间块体分析(HexahedralDNode).doc...
  15. STM32CubeMX SDRAM的使用(二)
  16. 网页开发工具有哪些?——开发者必备的15个Web开发工具
  17. 【2019-游记】中山纪念中学暑期游Day3
  18. 乱弹琴20140421
  19. python日期校验
  20. 让机器人组装Ikea家具是怎样的体验?

热门文章

  1. Linux stress命令详解
  2. msf与cs互传,msf与cs建立frp穿透
  3. SEO数据变化,检测网站死链接、蜘蛛访问、whois
  4. 程序员容易的疾病之干眼症(治疗篇)
  5. 私网ip和公网ip_详解
  6. (百例编程)76.小明买书
  7. java 视频提取音频 | Java工具类
  8. 集合易支付源码完美版
  9. 关于Matlab中括号用法的总结
  10. 神器分享:字母汉字图标ICON生成器