设计模式之组合模式
组合模式是把一组相似的对象当做一个单一的对象,创建了对象的树形结构。
例如用组合模式表示公司的人员架构。
定义员工对象
public class Employee { private String name; private String dept; private int salary; private List<Employee> subordinates; public Employee(String name, String dept, int salary) { this.name = name; this.dept = dept; this.salary = salary; subordinates = new ArrayList<>(); } public void add(Employee employee) { subordinates.add(employee); } public void remove(Employee employee) { subordinates.remove(employee); } public List<Employee> getSubordinates() { return subordinates; } @Override public String toString() { return "Employee{" + "name='" + name + '\'' + ", dept='" + dept + '\'' + ", salary=" + salary + '}'; } }
测试
public class _Test { 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); } } } }
输出结果
Employee{name='John', dept='CEO', salary=30000} Employee{name='Robert', dept='Head Sales', salary=20000} Employee{name='Richard', dept='Sales', salary=10000} Employee{name='Rob', dept='Sales', salary=10000} Employee{name='Michel', dept='Head Marketing', salary=20000} Employee{name='Laura', dept='Marketing', salary=10000} Employee{name='Bob', dept='Marketing', salary=10000}
简洁明了