转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39828653

组合模式(Composite):组合模式有时又叫部分-总体模式。将对象组合成树形结构来表示“部分-总体”层次结构。

组合模式在处理树形结构的问题时比較方便。

一、uml建模:

二、代码实现

  1. /**
  2. * 演示样例:组合模式有时也称“整合-部分”模式
  3. *
  4. * 组合模式在处理树形结构的问题时比較方便
  5. *
  6. * 节点
  7. */
  8. class TreeNode {
  9. /** 节点名称 */
  10. private String name;
  11. private TreeNode parent;
  12. private ArrayList<TreeNode> children = new ArrayList<TreeNode>();
  13.  
  14. public TreeNode(String name) {
  15. this.name = name;
  16. }
  17.  
  18. /**
  19. * 对相关属性进行封装
  20. */
  21. public String getName() {
  22. return name;
  23. }
  24.  
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28.  
  29. public TreeNode getParent() {
  30. return parent;
  31. }
  32.  
  33. public void setParent(TreeNode parent) {
  34. this.parent = parent;
  35. }
  36.  
  37. /**
  38. * 对孩子节点的增删查操作
  39. */
  40. public void add(TreeNode node) {
  41. children.add(node);
  42. }
  43.  
  44. public void delete(TreeNode node) {
  45. children.add(node);
  46. }
  47.  
  48. public Iterator<TreeNode> getChildren() {
  49. return children.iterator();
  50. }
  51.  
  52. }
  53.  
  54. /**
  55. * client測试类
  56. *
  57. * @author Leo
  58. */
  59. public class Test {
  60. public static void main(String[] args) {
  61. TreeNode rootNode = new TreeNode("A");
  62. TreeNode bNode = new TreeNode("B");
  63. TreeNode cNode = new TreeNode("C");
  64. TreeNode dNode = new TreeNode("D");
  65. rootNode.add(bNode);
  66. rootNode.add(cNode);
  67. cNode.add(dNode);
  68. Iterator<TreeNode> iterator = rootNode.getChildren();
  69. while (iterator.hasNext()) {
  70. System.out.println(iterator.next().getName());
  71. }
  72. }
  73. }

说明。这里构造了这样一棵树:

三、应用场景

将多个对象组合在一起进行操作。经常使用于表示树形结构中。比如二叉树等。

四、总结

组合能让客户以一致的方式处理个别对象以及对象组合。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

Java设计模式偷跑系列(十二)组合模式建模和实现的更多相关文章

  1. Java设计模式偷跑系列(十八)建模和责任链模式的实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40018231 责任链模式(ChainOfResponsibility): 有多个对象,每一 ...

  2. Java设计模式偷跑系列(六)Singleton模式的建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39784403 单例模式(Singleton):是一种经常使用的设计模式. 在Java应用中 ...

  3. Java设计模式偷跑系列(21)建模和实现享受metapatterns

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40021651 享元模式(Flyweight):运用共享的技术有效地支持大量细粒度的对象. ...

  4. Java设计模式菜鸟系列(十四)代理模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39856435 代理模式(Proxy):代理模式事实上就是多一个代理类出来,替原对象进行一些 ...

  5. Java设计模式菜鸟系列(十五)建造者模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39863125 建造者模式(Builder):工厂类模式提供的是创建单个类的模式.而建造者模 ...

  6. 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念

    深入理解Java并发框架AQS系列(一):线程 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 一.AQS框架简介 AQS诞生于Jdk1.5,在当时低效且功能单一的synchroni ...

  7. struts2官方 中文教程 系列十二:控制标签

    介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...

  8. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】

    2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...

  9. SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

    原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Se ...

随机推荐

  1. 在AcGIS随着大数据的生成DEM

    在ArcGIS产生DEM时间.数据来源是经常有的高程点.轮廓线,该高程点.等高线密集,可能有几千万.甚至亿高程点.轮廓线. 如果您使用这些矢量数据生成TIN.不能实现的,由于生成TIN时,支持的最大结 ...

  2. 【软件使用技巧】PL/SQL Developer实现双击table询

    二手plsql都知道,在表名默认双击[开展/关闭]. 习惯了MySql Workbench要么Sqlserver Management Studio无法适应其他管理工具. 直接在溶液: Tools - ...

  3. 分散式-ubuntu12.04安装spark-1.0.0

    1. 安装文档: http://spark.apache.org/docs/latest/spark-standalone.html 2. web UI: master's web UI, which ...

  4. dispatch_once认识分析

    dispatch_once为了确保代码运行一次 +(NSDateFormatter*)getDBDateFormat { static NSDateFormatter* format; static ...

  5. iPhone&amp;iPad DFU及恢复模式刷机、降级教程

    再次提醒,刷机需慎重处理. http://blog.csdn.net/ztp800201/article/details/11980643 iphone一共同拥有三种工作模式,各自是正常模式,恢复模式 ...

  6. Android4.0 Design之UI设计缺陷1

    我想成为Android卓越发展project联赛,不知道Android它如何设计规则,Android4.0谷歌公司的问世后Android一系列的设计原则,程序猿规范,不要盲目模仿IOS它的设计,由于A ...

  7. Linux进程管理(-)

    一.进程的类型 能够将执行在Linux系统中的进程分为三种不同的类型: 交互进程:由一个Shell启动的进程.交互进程既能够在前台执行,也能够在后台   执行. 批处理进程:不与特定的终端相关联,提交 ...

  8. MySQL多实例配置(两)

    MySQL操作和维护一个集中的数据库的.它可以由一个单一的执行MySQL在数据库服务器,部署多MySQL示例.这个功能是由mysqld_multi实现.mysqld_multimysqld的服务进程. ...

  9. 7.oracle学习门户系列七---网络管理和配置

    oracle学习门户系列七 网络管理和配置 们学习了模式和用户.包含模式定义以及模式的作用. 这篇我么来看下ORACLE数据库中的网络管理和配置.只是这篇好像和上篇没有继承啊.这怎么看? Ok,事实上 ...

  10. Afinal载入网络图片及下载文件用法

    Afinal高速开发框架使用起来很方便.以下将解说怎样利用Afinal载入网络图片及下载文件: 先看效果图: 注意:使用Afinal前需加入Afinal的jar,能够在这里下载:http://down ...