Java组合模式(思维导图)

图1 组合模式【点击查看图片】
1,以公司职员为例的结构
package com.cnblogs.mufasa.demo3; import java.util.ArrayList;
import java.util.List; public class Employee {
private String name;
private String dept;
private int salary;
private List<Employee> subordinates; //构造函数
public Employee(String name,String dept, int sal) {
this.name = name;
this.dept = dept;
this.salary = sal;
subordinates = new ArrayList<Employee>();//【核心所在】
} public void add(Employee e) {
subordinates.add(e);
} public void remove(Employee e) {
subordinates.remove(e);
} public List<Employee> getSubordinates(){
return subordinates;
} public String toString(){
return ("Employee :[ Name : "+ name
+", dept : "+ dept + ", salary :"
+ salary+" ]");
}
}
package com.cnblogs.mufasa.demo3;
public class CompositePatternDemo {
public static void main(String[] args) {
Employee CEO = new Employee("John","CEO", 30000);
Employee headSales = new Employee("Robert","Head Sales", 20000);
Employee headMarketing = new Employee("Michel","Head Marketing", 20000);
Employee clerk1 = new Employee("Laura","Marketing", 10000);
Employee clerk2 = new Employee("Bob","Marketing", 10000);
Employee salesExecutive1 = new Employee("Richard","Sales", 10000);
Employee salesExecutive2 = new Employee("Rob","Sales", 10000);
CEO.add(headSales);
CEO.add(headMarketing);
headSales.add(salesExecutive1);
headSales.add(salesExecutive2);
headMarketing.add(clerk1);
headMarketing.add(clerk2);
//打印该组织的所有员工
System.out.println(CEO);
for (Employee headEmployee : CEO.getSubordinates()) {
System.out.println(headEmployee);
for (Employee employee : headEmployee.getSubordinates()) {
System.out.println(employee);
}
}
}
}
2,以枝叶为例的结构
package com.cnblogs.mufasa.demo1; import java.util.ArrayList;
import java.util.List; public class ComponentDemo {
public abstract class Component {//内部类
String name;
public abstract void add(Component c);
public abstract void remove(Component c);
public abstract void eachChild();
} // 组合部件类
public class Leaf extends Component {//树叶 // 叶子节点不具备添加的能力,所以不实现
@Override
public void add(Component c) {
// TODO Auto-generated method stub
System.out.println("");
} // 叶子节点不具备添加的能力必然也不能删除
@Override
public void remove(Component c) {
// TODO Auto-generated method stub
System.out.println("");
} // 叶子节点没有子节点所以显示自己的执行结果
@Override
public void eachChild() {
// TODO Auto-generated method stub
System.out.println(name + "执行了");
} } // 组合类
public class Composite extends Component {//树枝 // 用来保存节点的子节点
List<Component> list = new ArrayList<Component>(); // 添加节点 添加部件
@Override
public void add(Component c) {
// TODO Auto-generated method stub
list.add(c);
} // 删除节点 删除部件
@Override
public void remove(Component c) {
// TODO Auto-generated method stub
list.remove(c);
} // 遍历子节点
@Override
public void eachChild() {
// TODO Auto-generated method stub
System.out.println(name + "执行了");
for (Component c : list) {
c.eachChild();
}
}
} }
package com.cnblogs.mufasa.demo1;
public class Client {
public static void main(String[] args) {
ComponentDemo demo = new ComponentDemo();
// 构造根节点
ComponentDemo.Composite rootComposite = demo.new Composite();
rootComposite.name = "根节点";
// 左节点
ComponentDemo.Composite compositeLeft = demo.new Composite();
compositeLeft.name = "左节点";
// 构建右节点,添加两个叶子几点,也就是子部件
ComponentDemo.Composite compositeRight = demo.new Composite();
compositeRight.name = "右节点";
ComponentDemo.Leaf leaf1 = demo.new Leaf();
leaf1.name = "右-子节点1";
ComponentDemo.Leaf leaf2 = demo.new Leaf();
leaf2.name = "右-子节点2";
compositeRight.add(leaf1);
compositeRight.add(leaf2);
// 左右节点加入 根节点
rootComposite.add(compositeRight);
rootComposite.add(compositeLeft);
// 遍历组合部件
rootComposite.eachChild();
}
}
3,核心


将元素进行分级
Java组合模式(思维导图)的更多相关文章
- Java技术栈思维导图
Java技术栈思维导图 Java IO流体系 设计模式
- Java基础学习—思维导图
找到两张Java学习的思维导图,特别适合我这样的菜鸟学习,贴过来和小伙伴分享.
- Java基础(含思维导图)
很早之前整理的Java基础的一些知识点,思维导图: 1.'别名现象' 对一个对象赋值另一个对象,会指向新的对象引用,赋值前的对象引用会由于不再被引用而被gc回收: 而基本类型则不同.基本类型存储了实际 ...
- Java内存管理思维导图
文 by / 林本托 Tips 做一个终身学习的人. 如果想要成为一名合格的 Java 程序员,就必须要涉及和掌握一些 Java 虚拟机的内部结构和特性.最近在读<深入理解Java 虚拟机> ...
- Java知识汇总——思维导图
转载:https://www.cnblogs.com/java1024/p/8757952.html Java知识点汇总,从基础到常用的API.还有常用的集合类,总结的很详细.图片是从论坛里面找到的, ...
- Java 内存溢出思维导图
文 by / 林本托 Tips 做一个终身学习的人. 在 Java 内存中,只有一个区域不会发生 OOM 异常,那就是程序计数器内存.下面的思维导图记录了每个内存区域发生内存异常的条件和基本的解决思路 ...
- Java知识体系思维导图
Java知识体系,为方便预览,将思维导图上传至印象笔记,博客园直接上传图片受限于图片大小,暂时接触这么多,待以后丰富 https://app.yinxiang.com/shard/s24/nl/272 ...
- java关键词整理——思维导图
如图 思维导图图片链接 http://www.edrawsoft.cn/viewer/public/s/5e27f174483042
- Java并发(思维导图)
1,线程状态转换 无限期等待: 限期等待: 线程生命流程: 2,实现方式 代码实现样例[三种方式]: package com.cnblogs.mufasa.demo2; import java.uti ...
- 阿里巴巴Java开发手册思维导图
趁着有时间把阿里巴巴Java开发手册又看了一遍了,很多时候觉得看完之后,发现自己好像一点都不记得了里面的内容了.只能把大概内容画一遍在脑子里形成一张图方便记忆,这样就更能够记得自己的看完的内容了.其中 ...
随机推荐
- 【转载】Maven安装配置+ GIt&SVN + Jenkins详细配置 软件项目管理 持续集成实验
原文地址: https://www.cnblogs.com/clownice/p/5395933.html 以下是学习笔记: Jenkins是一款开源持续集成的软件,实现集成的自动化 自动构建工具:M ...
- mysql 常见面试题
附录: https://mp.weixin.qq.com/s/pC0_Y7M7BkoUmlRwneZZdA 一.为什么用自增列作为主键 1.如果我们定义了主键(PRIMARY KEY),那么InnoD ...
- vue 中引入第三方js库
以 jQuery 为例 一.绝对路径直接引入,全局可用 主入口页面 index.html 中用 script 标签引入: <script src="./static/jquery-1. ...
- 第11组 Beta冲刺(2/5)
第11组 Beta冲刺(2/5) 队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/11997386.html 作业博客 https://edu. ...
- ArcGIS超级工具SPTOOLS-按属性裁剪,矢量数据批量裁剪,矢量数据批量合库
1.1 按属性裁剪 操作视频: https://weibo.com/tv/v/HwaZRoosq?fid=1034:4376687438183117 按属性裁剪:可以图形表,也可以是非图形表,字段值 ...
- Qt编写自定义控件32-等待进度条控件
一.前言 在各种各样的执行任务界面,有时候需要比较多的时间,需要给出一个直观的等待进度条表示当前正在执行的进度,而不至于懵逼在那里,用户不会觉得程序死了还是干嘛了. 等待进度条有好几种办法,比如直接叫 ...
- OpenStack Cinder发展动态系列--Austin峰会
在Mitaka版本,Cinder团队在多个特性和领域取得了重大进展. 本文将做一个简要的介绍:关于在Mitaka版本已经完成的功能和特性,以及讨论在Newton版本将会开发的功能和特性. 1 Cind ...
- Druid Monitor监控Java Web和Java SE项目
Druid Monitor 对于数据源,大家已经接触了不少了.比如c3p0.dhcp.proxool等,之后又发现使用tomcat-jdbc可以大大的提高性能.但是针对于我们的高并发的系统来说,总希望 ...
- Java 实现 ssh命令 登录主机执行shell命令
Java 实现 ssh命令 登录主机执行shell命令 1.SSH命令 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SS ...
- delphi7 clientdataset 详解
delphi Midas SQLServer的自增字段的处理1.新增时,表中有自增字段,但是不希望用Refresh,直接ApplyUpdates直接看见自增字段的值在DataSetProvider.A ...