定义:
用于表示具有层次结构的数据,使得我们对单个对象和组合对象的访问具有一致性。
特点:
组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码。(优点)
- 更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”。(优点)
- 设计较复杂,客户端需要花更多时间理清类之间的层次关系。(缺点)
-
通常适用场景:
在需要表示一个对象整体与部分的层次结构的场合。
- 要求对用户隐藏组合对象与单个对象的不同,用户可以用统一的接口使用组合结构中的所有对象的场合。
demo代码:
/** 每个员工都有姓名、部门、薪水这些属性,同时还有下属员工集合,而下属员工和自己的结构是一样的,也有姓名、部门这些属性,同时也有他们的下属员工集合。*/public class Employee {private String name;private String dept;private int salary;private List<Employee> subordinates; // 下属public Employee(String name,String dept, int sal) {this.name = name;this.dept = dept;this.salary = sal;subordinates = new ArrayList<>();}public void add(Employee e) {subordinates.add(e);}public void remove(Employee e) {subordinates.remove(e);}public List<Employee> getSubordinates(){return subordinates;}}
