简介
从字面意思得知,此模式把多个对象组合起来,以树形的方式组合对象表达 “部分-整体” 的层次结构,因树形节点分为叶子和分叶子,所以这些对象以此类推也分为简单和组合对象,但都实现同一个接口,目的是让调用端统一处理这些对象。
类层次和调用关系
示例
以公司部门组织结构为例,逐层打印部门名称,首先定义核心接口 Department
public interface Department {
void printName();
}
次接口有两个实现类,分别是 SimpleDepartment 和 CompositeDepartment。
类 SimpleDepartment 无子部门,实现如下:
public class SimpleDepartment implements Department {
private String name;
public SimpleDepartment(String name) {
this.name = name;
}
@Override
public void printName() {
System.out.println(name);
}
}
类 CompositeDepart 有子部门,实现如下:
public class CompositeDepartment implements Department {
private String name;
private List<Department> childrenDepartments;
public CompositeDepartment(String name, List<Department> childrenDepartments) {
this.name = name;
this.childrenDepartments = childrenDepartments;
}
@Override
public void printName() {
System.out.println(name);
childrenDepartments.forEach(Department::printName);
}
}
调用端:
public class Main {
public static void main(String[] args) {
Department dev1 = new SimpleDepartment("研发一部");
Department dev2 = new SimpleDepartment("研发二部");
Department devDepartment = new CompositeDepartment("研发部", List.of(dev1, dev2));
devDepartment.printName();
}
}
运行main方法,输出如下:
研发部
研发一部
研发二部