Appearance
组合模式
意图
将对象组合成树形结构以表示「部分—整体」层次,使用户对单个对象与组合对象的使用具有一致性。
类图
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 均为组合结构。
下一节:装饰器模式