(@WhiteTaken)设计模式学习——组合模式
下面来学习一下组合模式。
组合模式概念是什么呢。从别的地方抄来了一些理论。
理论:将对象组合成树形结构以表示“部分-整体”的层次结构。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、【设计模式】组合模式
java设计模式之组合模式 [学习难度:★★★☆☆,使用频率:★★★★☆] 树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式 ...
- java设计模式之组合模式(树形层级)
java设计模式之组合模式 学习难度:★★★☆☆,使用频率:★★★★☆] 树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式来 ...
- 每天一个设计模式之组合模式
作者按:<每天一个设计模式>旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现.诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) ...
- 学习组合模式,转载一段有关组合模式的详解
学习组合模式,转载一段有关组合模式的详解,从定义中可以看出,组合模式用来表示部分与整体的层次结构(类似于树结构),而且也可以使用户对单个对象(叶子节点)以及组合对象( 飞 ...
- 详解设计模式:组合模式
组合模式(Composite Pattern),又叫部分整体模式,是 GoF 的 23 种设计模式中的一种结构型设计模式. 组合模式 是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组 ...
- 结构型设计模式之组合模式
结构型设计模式之组合模式 组合模式 应用场景 优缺点 主要角色 组合模式结构 分类 透明组合模式 创建抽象根节点 创建树枝节点 创建叶子节点 客户端调用 安全组合模式 创建抽象根节点 创建树枝节点 创 ...
- Java设计模式之组合模式详解
文章目录 详解Java设计模式之组合模式 案例引入 组合模式 定义 模式类图结构 相关角色 典型代码 案例分析 类图设计 实例代码 结果分析 JavaJDK中的组合模式 透明组合模式 安全组合模式 组 ...
- Java设计模式之组合模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- JavaScript设计模式总结-组合模式
使用场景 1.对象存在整体-部分的结构,如树.数组等: 2.使用者希望对数据结构中的所有对象统一处理. 需要注意的是 1.组合模式所谓的结构并非"继承",而是"包含&qu ...
最新文章
- 阿里发布图计算平台GraphScope,即将向全社会开源
- 前端 验证码隐藏怎么实现_完成图形验证码
- Android之自定义控件显示点赞用户并通过用户名称进入该用户主页的功能
- 拆分一个字符串并把每个字符单独输出
- C++ trivial和non-trivial构造函数及POD类型(转)
- float取整数部分_一步一步学Python3(小学生也适用) 第六篇: 变量及整数(int)类型...
- 人大金仓数据库sql语句_人大金仓数据库总结(SQL和JDBC)
- c语言变量作为数组长度,为什么在C中不允许将数组的大小作为常量变量但在C中允许?...
- 使用集合映射和关联关系映射_使用R进行基因ID映射
- Google Research新成果,让表格理解和检索更上一层楼!
- python文本内容怎么转换成字典_怎么把照片上的文字转换成文本?照片转换文字神器来了...
- Leetcode 513 javascript
- 第08章节-Python3.5-Django工程创建 7
- 【C语言】%e,用科学计数法输出
- 松下服务器报警13参数修改,新版松下伺服发生故障报警代码一览及对策.doc
- 计算机播放音乐自录,怎么录制电脑上正在播放的视频音频
- 推荐系统(十九)Gate网络(二):百度GemNN(Gating-Enhanced Multi-Task Neural Networks)
- php随笔_PHP随笔 - 风清扬-深圳的个人页面 - OSCHINA - 中文开源技术交流社区
- 利用APPium获取自动浏览获取喵币
- 腾讯会议看不到别人的共享屏幕,共享屏幕是黑色解决方法
热门文章
- astr在python_python学习之初识字符串
- can是什么时候处于显性_can总线通信原理 显性
- 试用到期_各大化妆品品牌试用装广告
- html垂直线性渐变,html5线性渐变
- python random库怎么用_Python || Random库的使用
- mysql plus baomidou_com.baomidou.mybatisplus.core.mapper 不存在
- MVVM下拉框绑定触发事件
- 回归分析加不加常数项_时间序列分析基础(一)
- 事务超时时间无效_Java面试题:Spring事务面试考点的集合整理。建议收藏阅读...
- python数据库操作批量sql执行_利用Python如何批量修改数据库执行Sql文件