组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得客户端能够以一致的方式处理单个对象以及对象的组合。
在组合模式中,存在两种主要的对象类型:叶节点(Leaf)和组合节点(Composite)。叶节点表示树结构中的最小单元,它们没有子节点。组合节点是具有子节点的节点,可以包含其他叶节点和组合节点。
以下是组合模式的示例代码:
java
// 组件接口
public interface Component {
void operation();
}
// 叶节点
public class Leaf implements Component {
@Override
public void operation() {
System.out.println("执行叶节点操作");
}
}
// 组合节点
public class Composite implements Component {
private List<Component> children = new ArrayList<>();
public void add(Component component) {
children.add(component);
}
public void remove(Component component) {
children.remove(component);
}
@Override
public void operation() {
System.out.println("执行组合节点操作");
for (Component component : children) {
component.operation();
}
}
}
// 客户端代码
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);
// 执行操作
composite.operation();
}
}
在上述示例中,Component
是组件接口,定义了操作的方法。Leaf
是叶节点类,实现了 Component
接口,并定义了叶节点的操作。Composite
是组合节点类,也实现了 Component
接口,并包含了一个子节点列表。Composite
类中的 add
和 remove
方法用于添加和移除子节点。Composite
类的 operation
方法会执行组合节点的操作,并递归调用子节点的操作。
在客户端代码中,我们创建了一个叶节点和一个组合节点,并将叶节点添加到组合节点中。然后,我们调用组合节点的 operation
方法,它会执行组合节点的操作,并依次调用子节点的操作。
通过组合模式,我们可以将叶节点和组合节点统一对待,客户端可以像处理单个对象一样处理整个树形结构,从而简化了客户端的代码。组合模式常用于处理树形结构的问题,例如文件系统、图形界面控件等。