概述
- 定义:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性
- 适用场景:表示对象的部分-整体层次结构,同时希望用户忽略组合对象与单个对象的不同
实现
public abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
public abstract void add(Component component);
public abstract void remove(Component component);
public abstract void foreach();
}
class Composite extends Component {
private List<Component> markets = new ArrayList<>();
public Composite(String name) {
super(name);
}
@Override
public void add(Component component) {
markets.add(component);
}
@Override
public void remove(Component component) {
markets.remove(component);
}
@Override
public void foreach() {
System.out.println(name);
for (Component m : markets) {
m.foreach();
}
}
}
class Leaf extends Component {
public Leaf(String name) {
super(name);
}
@Override
public void add(Component component) {
}
@Override
public void remove(Component component) {
}
@Override
public void foreach() {
System.out.println(name);
}
}
// 客户端
public class Client {
public static void main(String[] args) {
Component root = new Composite("root");
Component c1 = new Composite("composite 1");
Component c2 = new Leaf("leaf 1");
Component c3 = new Leaf("leaf 1-1");
root.add(c1);
root.add(c2);
market1.add(c3);
root.foreach();
}
}
通过组合模式模糊了简单元素和复杂元素,使客户端对两者一视同仁,从而降低了客户端对于复杂元素内部结构的耦合
实际应用
org.w3c.dom.Node