组合模式

210 阅读2分钟

组合模式应用场景

多个对象之间可以忽略他们不同,共用对象的属性。就像公司主管管理管理组 管理组管制基层员工一样 他们都有着基本相同的属性、职称、薪资之类的...

组合模式实现

public class Employee {

    private String name;
    private int age;
    private double sale;
    public List<Employee> underLing;

    public Employee(String name, int age, double sale) {
        this.name = name;
        this.age = age;
        this.sale = sale;
        underLing = new LinkedList<Employee>();
    }

    public void add(Employee under) {
        this.underLing.add(under);
    }

    public void remove(Employee under) {
        this.underLing.remove(under);
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sale=" + sale +
                '}';
    }
}

对象的实例,多个对象有着共同的属性且不同可忽略,所有对象实例都用以上类。

public class EmployeeTest {

    public static void main(String[] args) {
        // 主管
        Employee one = new Employee("老大", 1, 10000.0); //1
        Employee one1 = new Employee("主管1", 2, 5000.0); //2
        //Employee one2 = new Employee("主管2", 12, 5000.0);

        // 管理组
        Employee two = new Employee("员工1", 3, 3000.0); //3
        Employee two1 = new Employee("员工2", 3, 3000.0); //3
        Employee two2 = new Employee("员工3", 3, 3000.0); //3
        Employee two3 = new Employee("员工4", 3, 3000.0); //3
        Employee two4 = new Employee("员工5", 3, 3000.0); //3

        // 组合
        one.add(one1);
        one1.add(two);
        one1.add(two1);
        one1.add(two2);
        one1.add(two3);
        one1.add(two4);

        System.out.println("董事长 :" + one.toString());
        for (int i = 0; i <one.underLing.size(); i++) {
            System.out.println("主管信息 :" + one.underLing.get(i).toString());
            for (int j = 0; j < one.underLing.get(i).underLing.size(); j++) {
                System.out.println("员工信息 :" + one.underLing.get(i).underLing.get(j).toString());
            }
        }
    }

}

通过内部的List集合将多类组合,又将组合通过构造器初始化。后续使用即可。下面看一下测试结果

董事长 :Employee{name='老大', age=1, sale=10000.0}
主管信息 :Employee{name='主管1', age=2, sale=5000.0}
员工信息 :Employee{name='员工1', age=3, sale=3000.0}
员工信息 :Employee{name='员工2', age=3, sale=3000.0}
员工信息 :Employee{name='员工3', age=3, sale=3000.0}
员工信息 :Employee{name='员工4', age=3, sale=3000.0}
员工信息 :Employee{name='员工5', age=3, sale=3000.0}

Process finished with exit code 0

小结

组合模式优点就是代码简单可读性高,随时可以加入员工等职位信息扩展性较好。但是缺点就是违反了设计模式的依赖倒转原则。

源码下载地址: github.com/Liyinzuo/De…

以上便是组合模式介绍,如果错误或者不足地方欢迎指正。