类图

  1. /**
  2. * 树 总体
  3. *
  4. * @author stone
  5. *
  6. */
  7. public class Tree {
  8. private TreeNode root; //根节点
  9.  
  10. public Tree(String name) {
  11. this.root = new TreeNode(name);
  12. }
  13.  
  14. public TreeNode getRoot() {
  15. return root;
  16. }
  17. }
  1. /**
  2. * 树节点 部份
  3. * 也能够自身代表树:一堆节点组成了一颗树
  4. *
  5. * @author stone
  6. *
  7. */
  8. public class TreeNode {
  9.  
  10. private String name;
  11. private TreeNode parent;
  12. private List<TreeNode> children;
  13.  
  14. public TreeNode(String name) {
  15. this.name = name;
  16. this.children = new ArrayList<TreeNode>();
  17. }
  18.  
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22.  
  23. public String getName() {
  24. return name;
  25. }
  26.  
  27. public void setParent(TreeNode parent) {
  28. this.parent = parent;
  29. }
  30.  
  31. public TreeNode getParent() {
  32. return parent;
  33. }
  34.  
  35. public List<TreeNode> getChildren() {
  36. return children;
  37. }
  38.  
  39. public void add(TreeNode node) {
  40. this.children.add(node);
  41. }
  42.  
  43. public void remove(TreeNode node) {
  44. this.children.remove(node);
  45. }
  46. }
  1. /*
  2. * 组合(Composite)模式 又叫做部分-总体模式
  3. * 它使我们层级、树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序能够像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦
  4. * 以下情况下适用Composite模式:
  5. 1.你想表示对象的部分-总体层次结构
  6. 2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的全部对象。
  7. */
  8. public class Test {
  9. public static void main(String[] args) {
  10. // Tree treeA = new Tree("A");
  11. // treeA.getRoot().add(new TreeNode("B"));
  12. // treeA.getRoot().add(new TreeNode("C"));
  13. // TreeNode treeNodeD = new TreeNode("D");
  14. // treeNodeD.add(new TreeNode("D1"));
  15. // treeNodeD.add(new TreeNode("D2"));
  16. // treeA.getRoot().add(treeNodeD);
  17. // print(treeA.getRoot());
  18. /*
  19. * 上面使用了Tree对象,
  20. * 以下仅仅使用TreeNode对象,符合组合模式的定义,既代表部分也代表总体
  21. */
  22. TreeNode treeA = new TreeNode("A");
  23. treeA.add(new TreeNode("B"));
  24. treeA.add(new TreeNode("C"));
  25. TreeNode treeNodeD = new TreeNode("D");
  26. treeNodeD.add(new TreeNode("D1"));
  27. treeNodeD.add(new TreeNode("D2"));
  28. treeA.add(treeNodeD);
  29. print(treeA);
  30. /*
  31. * 其它演示样例:文件系统{文件夹、文件}, 相似这样的可用递归遍历的结构,
  32. * 用一个对象就能表示部分与总体,都能够用组合模式
  33. */
  34.  
  35. }
  36.  
  37. public static void print(TreeNode root) {
  38. if (root == null) return;
  39. LinkedList<TreeNode> linkedList = new LinkedList<TreeNode>();
  40. linkedList.add(root);
  41. while (!linkedList.isEmpty()) {
  42. TreeNode node = linkedList.removeFirst();
  43. System.out.println(node.getName());
  44. List<TreeNode> children = node.getChildren();
  45. for (int i = 0; i < children.size(); i++) {
  46. TreeNode next = children.get(i);
  47. List<TreeNode> children2 = next.getChildren();
  48. if (!children2.isEmpty()) {
  49. linkedList.add(next);
  50. } else {
  51. System.out.println(next.getName());
  52. }
  53. }
  54. }
  55. }
  56. }

打印

  1. A
  2. B
  3. C
  4. D
  5. D1
  6. D2

Java 实现组合(Composite)模式的更多相关文章

  1. C++设计模式实现--组合(Composite)模式

    一. 举例 这个样例是书上的,如果有一个公司的组结结构例如以下: 它的结构非常像一棵树,当中人力资源部和財务部是没有子结点的,详细公司才有子结点. 并且最关健的是,它的每一层结构非常相似. 代码实现例 ...

  2. 组合(composite)模式

    定义 将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性 组合模式(Composite)将小对象组合成树形结构,使用户操作组合对象如同操作一个单个对象.组 ...

  3. 设计模式C++描述----11.组合(Composite)模式

    一. 举例 这个例子是书上的,假设有一个公司的组结结构如下: 它的结构很像一棵树,其中人力资源部和财务部是没有子结点的,具体公司才有子结点. 而且最关健的是,它的每一层结构很相似. 代码实现如下: / ...

  4. 八、结构模式之组合(Composite)模式

    组合模式属于对象的结构模式,有时又叫做部分-整体模式,组合模式将对象组织到树结构中,可以用来描述整体与部分的联系.其可以使客户端将单纯元素和组合元素同等对待. 当需求中是体现部分与整体层次的结构时,以 ...

  5. Head First 设计模式 —— 11. 组合 (Composite) 模式

    思考题 我们不仅仅要支持多个菜单,升值还要支持菜单中的菜单.你如何处理这个新的设计需求? P355 [提示]在我们的新设计中,真正需要以下三点: P354 我们需要某种属性结构,可以容纳菜单.子菜单和 ...

  6. Java设计模式(8)组合模式(Composite模式)

    Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树 ...

  7. 组合模式/composite模式/对象结构型模式

    组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 C ...

  8. Java设计模式——组合模式

    JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...

  9. 【设计模式】Java设计模式 - 组合模式

    Java设计模式 - 组合模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...

随机推荐

  1. POJ 3352 Road Construction (边双连通分量)

    题目链接 题意 :有一个景点要修路,但是有些景点只有一条路可达,若是修路的话则有些景点就到不了,所以要临时搭一些路,以保证无论哪条路在修都能让游客到达任何一个景点 思路 :把景点看成点,路看成边,看要 ...

  2. 用U盘安装系统2

    这种方式USB启动盘制作成功之后是可以往里面存放任何资料的,我喜欢用这一种 首先,在网站上下载一个你想要装的系统 (百度一下优优系统,大地系统,深度技术,MSDN我告诉你,都可以,看你自己喜欢了) 例 ...

  3. BZOJ_1610_[Usaco2008_Feb]_Line连线游戏_(计算几何基础+暴力)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1610 给出n个点,问两两确定的直线中,斜率不同的共有多少条. 分析 暴力枚举直线,算出来斜率放 ...

  4. LFS 中文版手册发布:如何打造自己的 Linux 发行版

    您是否想过打造您自己的 Linux 发行版?每个 Linux 用户在他们使用 Linux 的过程中都想过做一个他们自己的发行版,至少一次.我也不例外,作为一个 Linux 菜鸟,我也考虑过开发一个自己 ...

  5. 基于DDD的现代ASP.NET开发框架--ABP系列之3、ABP分层架构

    基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:ht ...

  6. HDU 1285

    #include<stdio.h> #include<string.h> int degree[505],vis[505],map[501][501]; int main() ...

  7. CentOS6.4下Git服务器Gitosis安装配置

    1.安装GIt: #yum install git 2.增加一个git用户 #useradd git #passwd git 3.创建git仓库存储目录,设置权限 #mkdir /home/git/r ...

  8. [SCOI2009]游戏

    Time Limit: 1 Sec  Memory Limit: 162 MB Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始wi ...

  9. Windows下部署Git Server端

    解决方案一: (注意:如果英文阅读没太大障碍,直接到Bonobo官网看相关文档即可.) win7(windows server 2008应该也可以,没测试过)+ IIS7.5(win7自带的)+ Gi ...

  10. nyoj 96 一个水题目

    虽然很简单,发现自己用内存太高了了,算了,我就是这水平了. 描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数. 输入 第一行为M,表示 ...