Github: CompositePattern.java
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
将对象组合成树形结构以表示”部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
定义员工类
/*** 定义员工*/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;this.subordinates = new ArrayList<>();}public Employee add(Employee e){subordinates.add(e);return this;}public Employee remove(Employee e){subordinates.remove(e);return this;}public List<Employee> getSubordinates() {return subordinates;}@Overridepublic String toString() {return "Employee{" + "name='" + name + '\'' + ", dept='" + dept + '\'' + ", salary=" + salary + '}';}}
测试,打印 ```java public static void main(String[] args) { CompositePattern pattern = new CompositePattern(); pattern.composite(); }
private void composite() { Employee ceo = new Employee(“gao”, “ceo”, 2000); Employee cfo = new Employee(“sky1”, “cfo”, 2000); Employee cto = new Employee(“sky”, “cto”, 2000); ceo.add(cfo).add(cto);
Employee cfo_e1 = new Employee("cf_e1", "cfo", 10);Employee cfo_e2 = new Employee("cf_e2", "cfo", 10);cfo.add(cfo_e1).add(cfo_e2);Employee cto_e1 = new Employee("ct_e1", "cto", 9);Employee cto_e2 = new Employee("ct_e2", "cto", 9);cto.add(cto_e1).add(cto_e2);Stack<Employee> stack = new Stack<>();stack.add(ceo);while (stack != null && stack.size() > 0){Employee e = stack.pop();System.out.println(e);List<Employee> es;if((es = e.getSubordinates()) != null && es.size() > 0){stack.addAll(es);}}
}
输出结果:```javaEmployee{name='gao', dept='ceo', salary=2000}Employee{name='sky', dept='cto', salary=2000}Employee{name='ct_e2', dept='cto', salary=9}Employee{name='ct_e1', dept='cto', salary=9}Employee{name='sky1', dept='cfo', salary=2000}Employee{name='cf_e2', dept='cfo', salary=10}Employee{name='cf_e1', dept='cfo', salary=10}
这里可以优化打印逻辑,使得输出结果呈现树形结构。更能直观
