组合模式
什么是组合模式
组合模式按照我的理解是:把一组相似的对象当作一个单一的对象,在对象中 除了对象自己有的属性再加上一个属性list 这里面存放的是本对象的集合
比如:权限 权限有老板,管理员,普通人员 ,老板只有一个并且拥有所有权限
管理员:可以拥有对应的权限,不同的管理员负者不同的模块 并且管理不同的普通人员 HR:负责招人等,销售:负者买东西等
普通人员:干事的人
在组合模式中 我们可以只使用一个对象 ,在老板的list中是包含使用管理员的对象
在管理员的list中又包含自己所对应的普通人员 一层管一层
就好像是一颗树
组合模式是做什么的
它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
组合模式的应用场景
部分、整体场景,如树形菜单,文件、文件夹的管理。
使用组合模式的好处
1、高层模块调用简单。
2、节点自由增加。
代码
对象
public class Employee {
//姓名
private String name;
//工作
private String job;
//工资
private Integer salary;
//用于存放下属
private List<Employee> subordinates;
//构造方法 用于创建对象的时候方便
public Employee(String name, String job, Integer salary) {
this.name = name;
this.job = job;
this.salary = salary;
//创建集合
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;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", job='" + job + '\'' +
", salary=" + salary +
", subordinates=" + subordinates +
'}';
}
}
测试
public class Demo {
public static void main(String[] args) {
//老板
Employee CEO = new Employee("A","CEO", 300000);
//HR经理
Employee B1 = new Employee("B1","HR", 35000);
//销售经理
Employee B2 = new Employee("B2","销售", 50000);
//HR(工作人员)
Employee B1C1 = new Employee("B1C1","HR", 5000);
Employee B1C2 = new Employee("B1C2","HR", 5000);
//销售(工作人员)
Employee B2C1 = new Employee("B2C1","销售", 20000);
Employee B2C2 = new Employee("B2C2","销售", 20000);
//现在我们把他们组合起来
CEO.add(B1);
CEO.add(B2);
B1.add(B1C1);
B1.add(B1C2);
B2.add(B2C1);
B2.add(B2C2);
System.out.println(CEO);
//查看CEO所管理的所有人员
for (Employee headEmployee : CEO.getSubordinates()) {
System.out.println(headEmployee);
for (Employee employee : headEmployee.getSubordinates()) {
System.out.println(employee);
}
}
}
}
//测试结果
Employee{name='A', job='CEO', salary=300000, subordinates=[Employee{name='B1', job='HR', salary=35000, subordinates=[Employee{name='B1C1', job='HR', salary=5000, subordinates=[]}, Employee{name='B1C2', job='HR', salary=5000, subordinates=[]}]}, Employee{name='B2', job='销售', salary=50000, subordinates=[Employee{name='B2C1', job='销售', salary=20000, subordinates=[]}, Employee{name='B2C2', job='销售', salary=20000, subordinates=[]}]}]}
Employee{name='B1', job='HR', salary=35000, subordinates=[Employee{name='B1C1', job='HR', salary=5000, subordinates=[]}, Employee{name='B1C2', job='HR', salary=5000, subordinates=[]}]}
Employee{name='B1C1', job='HR', salary=5000, subordinates=[]}
Employee{name='B1C2', job='HR', salary=5000, subordinates=[]}
Employee{name='B2', job='销售', salary=50000, subordinates=[Employee{name='B2C1', job='销售', salary=20000, subordinates=[]}, Employee{name='B2C2', job='销售', salary=20000, subordinates=[]}]}
Employee{name='B2C1', job='销售', salary=20000, subordinates=[]}
Employee{name='B2C2', job='销售', salary=20000, subordinates=[]}