Skip to content

组合模式

意图

将对象组合成树形结构以表示「部分—整体」层次,使用户对单个对象与组合对象的使用具有一致性。

类图

Java 示例

java
import java.util.*;

public interface Node {
    String getName();
    void print(String indent);
}

public class FileNode implements Node {
    private final String name;
    public FileNode(String name) { this.name = name; }
    public String getName() { return name; }
    public void print(String indent) {
        System.out.println(indent + name);
    }
}

public class DirNode implements Node {
    private final String name;
    private final List<Node> children = new ArrayList<>();
    public DirNode(String name) { this.name = name; }
    public void add(Node n) { children.add(n); }
    public String getName() { return name; }
    public void print(String indent) {
        System.out.println(indent + name + "/");
        for (Node c : children) c.print(indent + "  ");
    }
}

AWT/Swing 的 Container/Component、XML DOM 均为组合结构。

下一节:装饰器模式