组合模式 Composite Pattern
将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
组合模式用于构建树形结构,如文件目录、组织关系等。关键代码是继承父类并且包含一个父类的集合。
UML图:
代码:
import java.util.ArrayList;
import java.util.List;
public abstract class Employee {
protected String name;
protected int salary;
protected List<Employee> subordinates = new ArrayList<>();
public Employee(String name, int salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public void addSubordinate(Employee employee) {
subordinates.add(employee);
}
public List<Employee> getSubordinates() {
return subordinates;
}
public String toString() {
return "[name: " + name + "; salary:" + salary + "]";
}
}
public class CEO extends Employee {
public CEO(String name, int salary) {
super(name, salary);
}
}
public class Manager extends Employee {
public Manager(String name, int salary) {
super(name, salary);
}
}
public class Staff extends Employee {
public Staff(String name, int salary) {
super(name, salary);
}
}
public class Client {
public static void main(String[] args) {
CEO ceo = new CEO("Zhang", 100);
Manager salesManager = new Manager("Wang", 80);
Manager developmentManager = new Manager("Li", 80);
ceo.addSubordinate(salesManager);
ceo.addSubordinate(developmentManager);
Staff salesman1 = new Staff("Ding", 50);
Staff salesman2 = new Staff("Yang", 50);
salesManager.addSubordinate(salesman1);
salesManager.addSubordinate(salesman2);
Staff engineer1 = new Staff("Liu", 50);
Staff engineer2 = new Staff("Chen", 50);
developmentManager.addSubordinate(engineer1);
developmentManager.addSubordinate(engineer2);
System.out.println(ceo.toString());
for(Employee e : ceo.subordinates) {
System.out.println("--" + e.toString());
for(Employee es : e.getSubordinates()) {
System.out.println(" --" + es.toString());
}
}
}
}