组合模式是一种
结构型设计模式
,它允许将对象组合成树形结构来表示整体-部分层次结构
。组合模式使得客户端可以统一处理单个对象和组合对象
,而不必关心它们的具体类型。
1 结构图
2 代码展示
import java.util.ArrayList;
import java.util.List;
// 组织机构抽象类
abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
public abstract void print();
}
// 具体的组织机构类:公司---相当于Composite组合类
class Company extends Component {
private List<Component> departments;
public Company(String name) {
super(name);
departments = new ArrayList<>();
}
public void addDepartment(Component department) {
departments.add(department);
}
public void removeDepartment(Component department) {
departments.remove(department);
}
public void print() {
System.out.println("Company: " + name);
System.out.println("Departments: ");
for (Component department : departments) {
department.print();
}
}
}
// 具体的组织机构类:部门
class Department extends Component {
public Department(String name) {
super(name);
}
public void print() {
System.out.println("Department: " + name);
}
}
// 客户端使用组合模式
public class Client {
public static void main(String[] args) {
// 创建公司
Company company = new Company("WEH Company");
// 创建部门
Department department1 = new Department("HR Department");
Department department2 = new Department("Finance Department");
Department department3 = new Department("IT Department");
// 将部门添加到公司中
company.addDepartment(department1);
company.addDepartment(department2);
company.addDepartment(department3);
// 打印组织机构树
company.print();
}
}
运行以上代码,输出结果为:
3 总结
在这个示例中,
Company
和Department
都继承了Component
抽象类。Company
类包含一个List
用于存储部门,它可以添加、删除和打印这些部门。Department
类只关心自己的名字,它实现了
通过使用组合模式,客户端可以统一处理公司和部门对象,无需关心它们的具体类型。这样,可以方便地操作整个组织机构的层次结构。