组合模式应用场景
多个对象之间可以忽略他们不同,共用对象的属性。就像公司主管管理管理组 管理组管制基层员工一样 他们都有着基本相同的属性、职称、薪资之类的...
组合模式实现
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…
以上便是组合模式介绍,如果错误或者不足地方欢迎指正。