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开发手册又看了一遍了,很多时候觉得看完之后,发现自己好像一点都不记得了里面的内容了.只能把大概内容画一遍在脑子里形成一张图方便记忆,这样就更能够记得自己的看完的内容了.其中 ...
随机推荐
- map初步(由ABBC--->A2BC)
1.题目: Given a string containing only 'A' - 'Z', we could encode it using the following method: 1. Ea ...
- AOP 底层实现原理
1.核心业务接口与实现 public interface IManager { void add(String item); } public class IManagerImpl implement ...
- Cesium中级教程6 - 3D Models 三维模型
3D Models 三维模型 本教程将教您如何通过Primitive API转换.加载和使用Cesium中的三维模型.如果你是Cesium的新用户,可能需要阅读三维模型部分的(空间数据可视化教程)[h ...
- Java-基于 Instrument 的 Agent
Agent 为 JVMTI 的客户端. 这里记录的是基于Java Instrument 的 Agent 实现,还有直接基于 JVMTI 的 Agent 实现. 在 JDK1.5 以后,我们可以使用 A ...
- Java动态修改运行环境
1.pom.xml直接添加一下配置 <profiles> <profile> <id>dev</id> <properties> <a ...
- 断句:Store all parameters but the first passed to this function as an array
// Store all parameters but the first passed to this function as an array //除了第一个参数,把调用publish函数时的所有 ...
- Qt编写自定义控件36-图片浏览器
一.前言 本控件主要用来作为一个简单的图片浏览器使用,可以上下翻页显示图片,图片还可以开启过度效果比如透明度渐变,应用场景有查看报警图片运行图片等.此控件非本人原创,来源于网络,我只是修正了好多处BU ...
- PAT 甲级 1024 Palindromic Number (25 分)(大数加法,考虑这个数一开始是不是回文串)
1024 Palindromic Number (25 分) A number that will be the same when it is written forwards or backw ...
- Freemarker使用总结
spring mvc 中 Freemarker 获取项目根目录,方便HTML页面配置各种路径 在SpringMVC框架中使用Freemarker试图时,要获取根路径的方式如下: <!-- Fre ...
- jenkins:多个job时怎么按照一定顺序执行构建
一.安装Jenkins多项目构建插件(我已安装):Multijob 二.新建Multijob Project任务 三.配置