下面来学习一下组合模式。

组合模式概念是什么呢。从别的地方抄来了一些理论。

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

拙见:组合模式就是为处理树形结构优化出来的一套理论方法。-_-!!!用递归可以统一处理树形结构中的对象。

下面直接上代码。

总公司  --分公司

          --分公司下属分公司

          --分公司下属办事处

       --分公司办事处

接口类ICompany。

1 import java.util.List;
2
3 public interface ICompany {
4     public void display();
5     public boolean add(ICompany company);
6     public boolean remove(ICompany company);
7     public List<ICompany> getChild();
8 }

公司类Company。

 1 import java.util.ArrayList;
 2 import java.util.List;
 3
 4 public class Company implements ICompany {
 5     private String name;
 6     private List<ICompany> children;
 7
 8     public Company(String name) {
 9         this.name = name;
10         this.children = new ArrayList<ICompany>();
11     }
12     @Override
13     public void display() {
14         System.out.println(name);
15     }
16     @Override
17     public boolean add(ICompany company) {
18         return children.add(company);
19     }
20     @Override
21     public boolean remove(ICompany company) {
22         return children.remove(company);
23     }
24     @Override
25     public List<ICompany> getChild() {
26         return children;
27     }
28 }

办事处类ConcreteCompany。

 1 import java.util.ArrayList;
 2 import java.util.List;
 3
 4 public class ConcreteCompany implements ICompany {
 5     private String name;
 6
 7     public ConcreteCompany(String name) {
 8         this.name = name;
 9     }
10     @Override
11     public void display() {
12         System.out.println(name);
13     }
14     @Override
15     public boolean add(ICompany company) {
16         return false;
17     }
18     @Override
19     public boolean remove(ICompany company) {
20         return false;
21     }
22     @Override
23     public List<ICompany> getChild() {
24         return null;
25     }
26 }

测试类MainClass。

 1 import java.util.List;
 2
 3 /*
 4  * 组合模式测试
 5  */
 6 public class MainClass {
 7     public static void main(String[] args) {
 8         ICompany company = new Company("总公司");
 9         ICompany company1 = new Company("分公司1");
10         ICompany company2 = new Company("分公司2");
11         ICompany company3 = new ConcreteCompany("分公司办事处");
12         company.add(company1);
13         company.add(company2);
14         company.add(company3);
15
16         ICompany company11 = new Company("分公司1下属公司1");
17         ICompany company12 = new Company("分公司1下属公司2");
18         ICompany company13 = new ConcreteCompany("分公司1下属办事处");
19         company1.add(company11);
20         company1.add(company12);
21         company1.add(company13);
22
23         ICompany company21 = new Company("分公司2下属公司");
24         ICompany company22 = new ConcreteCompany("分公司2下属办事处");
25         company2.add(company21);
26         company2.add(company22);
27
28         displayAllCompany(company, 0);
29     }
30
31     private static void displayAllCompany(ICompany rootCompany, int deep) {
32         for(int i = 0; i < deep; i++)
33         {
34             System.out.print("-");
35         }
36         rootCompany.display();
37         List<ICompany> children = rootCompany.getChild();
38         for(ICompany company:children)
39         {
40             if(company instanceof ConcreteCompany)
41             {
42                 for(int i = 0; i <= deep; i++)
43                 {
44                     System.out.print("-");
45                 }
46                 company.display();
47             }
48             else
49             {
50                 displayAllCompany(company, deep + 1);
51             }
52         }
53
54     }
55 }

以上代码主要就是用递归方法遍历了公司的结构。

测试结果。

这个模式的精华都在代码里,大家自己体会吧。。。共同进步!!!

转载于:https://www.cnblogs.com/WhiteTaken/p/7707416.html

(@WhiteTaken)设计模式学习——组合模式相关推荐

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

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

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

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

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

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

  4. 学习组合模式,转载一段有关组合模式的详解

                   学习组合模式,转载一段有关组合模式的详解,从定义中可以看出,组合模式用来表示部分与整体的层次结构(类似于树结构),而且也可以使用户对单个对象(叶子节点)以及组合对象( 飞 ...

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

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

  6. 结构型设计模式之组合模式

    结构型设计模式之组合模式 组合模式 应用场景 优缺点 主要角色 组合模式结构 分类 透明组合模式 创建抽象根节点 创建树枝节点 创建叶子节点 客户端调用 安全组合模式 创建抽象根节点 创建树枝节点 创 ...

  7. Java设计模式之组合模式详解

    文章目录 详解Java设计模式之组合模式 案例引入 组合模式 定义 模式类图结构 相关角色 典型代码 案例分析 类图设计 实例代码 结果分析 JavaJDK中的组合模式 透明组合模式 安全组合模式 组 ...

  8. Java设计模式之组合模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  9. JavaScript设计模式总结-组合模式

    使用场景 1.对象存在整体-部分的结构,如树.数组等: 2.使用者希望对数据结构中的所有对象统一处理. 需要注意的是 1.组合模式所谓的结构并非"继承",而是"包含&qu ...

最新文章

  1. 阿里发布图计算平台GraphScope,即将向全社会开源
  2. 前端 验证码隐藏怎么实现_完成图形验证码
  3. Android之自定义控件显示点赞用户并通过用户名称进入该用户主页的功能
  4. 拆分一个字符串并把每个字符单独输出
  5. C++ trivial和non-trivial构造函数及POD类型(转)
  6. float取整数部分_一步一步学Python3(小学生也适用) 第六篇: 变量及整数(int)类型...
  7. 人大金仓数据库sql语句_人大金仓数据库总结(SQL和JDBC)
  8. c语言变量作为数组长度,为什么在C中不允许将数组的大小作为常量变量但在C中允许?...
  9. 使用集合映射和关联关系映射_使用R进行基因ID映射
  10. Google Research新成果,让表格理解和检索更上一层楼!
  11. python文本内容怎么转换成字典_怎么把照片上的文字转换成文本?照片转换文字神器来了...
  12. Leetcode 513 javascript
  13. 第08章节-Python3.5-Django工程创建 7
  14. 【C语言】%e,用科学计数法输出
  15. 松下服务器报警13参数修改,新版松下伺服发生故障报警代码一览及对策.doc
  16. 计算机播放音乐自录,怎么录制电脑上正在播放的视频音频
  17. 推荐系统(十九)Gate网络(二):百度GemNN(Gating-Enhanced Multi-Task Neural Networks)
  18. php随笔_PHP随笔 - 风清扬-深圳的个人页面 - OSCHINA - 中文开源技术交流社区
  19. 利用APPium获取自动浏览获取喵币
  20. 腾讯会议看不到别人的共享屏幕,共享屏幕是黑色解决方法

热门文章

  1. astr在python_python学习之初识字符串
  2. can是什么时候处于显性_can总线通信原理 显性
  3. 试用到期_各大化妆品品牌试用装广告
  4. html垂直线性渐变,html5线性渐变
  5. python random库怎么用_Python || Random库的使用
  6. mysql plus baomidou_com.baomidou.mybatisplus.core.mapper 不存在
  7. MVVM下拉框绑定触发事件
  8. 回归分析加不加常数项_时间序列分析基础(一)
  9. 事务超时时间无效_Java面试题:Spring事务面试考点的集合整理。建议收藏阅读...
  10. python数据库操作批量sql执行_利用Python如何批量修改数据库执行Sql文件