组合模式
内容参考 W3c School
分类:结构性设计模式
应用:树形职位分布
目录
UML类图
可以看到十分的简单,就是一个公司有多个总裁:CTO、CEO、CFO等,每个总裁管理一个部门,每个部门有一个管理员,每个管理员有一堆下属;其中每一个角色都是一个Employee
创建实体类 Employee
public class Employee implements Serializable {
private static final long serialVersionUID = 2866206349251228694L;
/**姓名*/
private String name;
/**部门*/
private String dept;
/**工资*/
private Integer salary;
/**下属*/
private List<Employee> subordinates;
public Employee(String name, String dept, Integer salary) {
this.name = name;
this.dept = dept;
this.salary = salary;
subordinates = new ArrayList<>();
}
/**
* 新增下属
* @param employee 下属
*/
public void add(Employee employee){
subordinates.add(employee);
}
/**
* 移除下属
* @param employee 职员
*/
public void remove(Employee employee){
subordinates.remove(employee);
}
/**
* 获取下属的列表集合
* @return 下属的列表集合
*/
public List<Employee> getSubordinates(){
return subordinates;
}
@Override
public String toString() {
return "[Employee] Name:"+name+"\tDepartment:"+dept+"\tSalary:"+salary;
}
}
测试运行
public class ExecuteMain {
public static void main(String[] args) {
Employee Boss = new Employee("| Boss |","Boss",99999);
Employee CEO = new Employee("\\CEO/","Manager",88888);
Employee CTO = new Employee("\\CTO/","Manager",88888);
Employee CFO = new Employee("\\CFO/","Manager",88888);
Boss.add(CEO);
Boss.add(CTO);
Boss.add(CFO);
Employee GroupLeader1 = new Employee("GroupLeader1","Leader",22222);
Employee GroupLeader2 = new Employee("GroupLeader2","Leader",22222);
Employee GroupLeader3 = new Employee("GroupLeader3","Leader",22222);
CEO.add(GroupLeader1);
CTO.add(GroupLeader2);
CFO.add(GroupLeader3);
Employee worker1 = new Employee("worker1","worker",11111);
Employee worker2 = new Employee("worker2","worker",11111);
Employee worker3 = new Employee("worker3","worker",11111);
Employee worker4 = new Employee("worker4","worker",11111);
Employee worker5 = new Employee("worker5","worker",11111);
Employee worker6 = new Employee("worker6","worker",11111);
CEO.add(worker1);
CEO.add(worker2);
CTO.add(worker3);
CTO.add(worker4);
CFO.add(worker5);
CFO.add(worker6);
System.out.println(Boss);
print(Boss.getSubordinates());
}
public static void print(List<Employee> employees){
for (Employee employee:employees){
System.out.println(employee);
if(employee.getSubordinates() != null){
print(employee.getSubordinates());
}
}
}
}
[Employee] Name:| Boss | Department:Boss Salary:99999
[Employee] Name:\CEO/ Department:Manager Salary:88888
[Employee] Name:GroupLeader1 Department:Leader Salary:22222
[Employee] Name:worker1 Department:worker Salary:11111
[Employee] Name:worker2 Department:worker Salary:11111
[Employee] Name:\CTO/ Department:Manager Salary:88888
[Employee] Name:GroupLeader2 Department:Leader Salary:22222
[Employee] Name:worker3 Department:worker Salary:11111
[Employee] Name:worker4 Department:worker Salary:11111
[Employee] Name:\CFO/ Department:Manager Salary:88888
[Employee] Name:GroupLeader3 Department:Leader Salary:22222
[Employee] Name:worker5 Department:worker Salary:11111
[Employee] Name:worker6 Department:worker Salary:11111
Process finished with exit code 0