组合模式
组合模式(Composite Pattern)是一种结构型设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。
在组合模式中,有两种类型的对象:叶子对象和组合对象。叶子对象表示树形结构的最底层,它们不包含任何子对象。而组合对象则包含其他的组合对象和叶子对象,它们也被称为容器对象。组合对象负责将其子对象合并成一个更大的组合对象,同时也可以在任何层次结构中添加或删除子对象。
下面是一个简单的组合模式示例:
// 抽象组件
interface Component {
void add(Component component);
void remove(Component component);
void display();
}
// 叶子组件
class Leaf implements Component {
private String name;
public Leaf(String name) {
this.name = name;
}
public void add(Component component) {
// 叶子节点无法添加子节点
}
public void remove(Component component) {
// 叶子节点无法删除子节点
}
public void display() {
System.out.println("Leaf: " + name);
}
}
// 容器组件
class Composite implements Component {
private List<Component> components = new ArrayList<>();
public void add(Component component) {
components.add(component);
}
public void remove(Component component) {
components.remove(component);
}
public void display() {
for (Component component : components) {
component.display();
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Component root = new Composite();
Component node1 = new Composite();
Component node2 = new Composite();
Component leaf1 = new Leaf("Leaf 1");
Component leaf2 = new Leaf("Leaf 2");
Component leaf3 = new Leaf("Leaf 3");
node1.add(leaf1);
node1.add(leaf2);
node2.add(leaf3);
root.add(node1);
root.add(node2);
root.display();
}
}
在上面的示例中,Component 是抽象组件,Leaf 是叶子组件,Composite 是容器组件。Composite 类包含了一个 List 类型的成员变量,用于存储它的子节点。客户端代码通过创建不同的叶子和容器组件,并将它们组合在一起来构建一棵树形结构。最后,客户端代码调用根节点的 display 方法,打印出整个树形结构。由于叶子组件和容器组件都实现了 Component 接口,因此客户端代码对单个对象和组合对象的使用具有一致性。