组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树状结构以表示部分-整体层次结构。组合模式使得客户端可以以一致的方式处理单个对象和组合对象。在组合模式中,有两种重要的角色:叶子节点(Leaf)和容器节点(Composite)。
以下是一个简单的Java示例,演示如何实现组合模式:
首先,定义一个抽象类 Component
表示组合中的所有对象的通用接口:
public abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
public abstract void operation();
}
然后,创建叶子节点类 Leaf
,它继承自 Component
:
public class Leaf extends Component {
public Leaf(String name) {
super(name);
}
@Override
public void operation() {
System.out.println("Leaf " + name + " is performing an operation");
}
}
接下来,创建容器节点类 Composite
,它也继承自 Component
,并可以包含其他组件:
import java.util.ArrayList;
import java.util.List;
public class Composite extends Component {
private List<Component> children = new ArrayList<>();
public Composite(String name) {
super(name);
}
@Override
public void operation() {
System.out.println("Composite " + name + " is performing an operation");
for (Component child : children) {
child.operation();
}
}
public void add(Component component) {
children.add(component);
}
public void remove(Component component) {
children.remove(component);
}
}
现在,我们可以创建一个组合结构,包含叶子节点和容器节点,并通过组合模式来处理它们:
public class CompositePatternDemo {
public static void main(String[] args) {
Component leaf1 = new Leaf("Leaf 1");
Component leaf2 = new Leaf("Leaf 2");
Component leaf3 = new Leaf("Leaf 3");
Composite composite1 = new Composite("Composite 1");
composite1.add(leaf1);
composite1.add(leaf2);
Composite composite2 = new Composite("Composite 2");
composite2.add(leaf3);
Composite root = new Composite("Root");
root.add(composite1);
root.add(composite2);
root.operation();
}
}
在这个示例中,我们创建了一个包含叶子节点和容器节点的组合结构。通过组合模式,我们可以以一致的方式处理单个叶子节点和复合容器节点。调用 root.operation()
会递归调用每个节点的 operation()
方法,从而实现整个组合结构的操作。
组合模式适用于需要以一致的方式处理单个对象和组合对象的场景,例如文件系统、组织结构等。它使得客户端代码更加灵活,能够递归地处理复杂的对象结构。