组合模式(Composite Pattern)是一种结构型设计模式,它的主要目标是将对象组织到树形结构中,并且能够以统一的方式处理单个对象和组合对象。这种模式使得客户端可以一致地对待单个对象以及对象的集合。
// 抽象组件
public abstract class Component {
public abstract void add(Component component);
public abstract void remove(Component component);
public abstract void operation();
}
// 叶子组件(例如:文本文件)
public class Leaf extends Component {
@Override
public void add(Component component) {
throw new UnsupportedOperationException("Leaf doesn't support adding components");
}
@Override
public void remove(Component component) {
throw new UnsupportedOperationException("Leaf doesn't support removing components");
}
@Override
public void operation() {
System.out.println("Executing operation on a leaf component.");
}
}
// 容器组件(例如:目录)
public class Composite extends Component {
private List<Component> children = new ArrayList<>();
@Override
public void add(Component component) {
children.add(component);
}
@Override
public void remove(Component component) {
children.remove(component);
}
@Override
public void operation() {
for (Component child : children) {
child.operation();
}
System.out.println("Executing operation on a composite component and its children.");
}
}
// 使用示例
public class Client {
public static void main(String[] args) {
// 创建叶子节点
Component leaf1 = new Leaf();
Component leaf2 = new Leaf();
// 创建容器节点并添加叶子节点
Composite composite = new Composite();
composite.add(leaf1);
composite.add(leaf2);
// 对单个叶子和组合执行操作
leaf1.operation();
composite.operation();
}
}
想象一下你正在管理一家公司,这家公司由员工组成,有些员工直接向你报告(叶子节点),有些员工是团队领导,他们手下还有其他员工(容器节点)。组合模式允许你对每位员工或整个团队下达命令时使用相同的方式,无论是单独与某位员工交谈,还是召开团队会议进行沟通。