设计模式之组合模式

组合模式是把一组相似的对象当做一个单一的对象,创建了对象的树形结构。

 

例如用组合模式表示公司的人员架构。

定义员工对象

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}

简洁明了

 

posted @ 2020-12-07 13:08  _Gateway  阅读(98)  评论(0编辑  收藏  举报