组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性,从而使得用户无需关心对象的具体类型,而只需要关心对象的接口。
下面是一个简单的组合模式的示例:
首先,我们定义一个抽象类 Component,它有一个 add() 方法和一个 remove() 方法,用于添加和删除子组件,还有一个 display() 方法,用于显示组件的信息:
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 display();
}然后,我们定义一个叶子节点类 Leaf,它继承自 Component,表示组合中的叶子节点:
public class Leaf extends Component {
public Leaf(String name) {
super(name);
}
public void add(Component component) {
System.out.println("Cannot add to a leaf");
}
public void remove(Component component) {
System.out.println("Cannot remove from a leaf");
}
public void display() {
System.out.println(name);
}
}接下来,我们定义一个组合节点类 Composite,它继承自 Component,表示组合中的非叶子节点:
import java.util.ArrayList;
import java.util.List;
public class Composite extends Component {
private List<Component> children = new ArrayList<Component>();
public Composite(String name) {
super(name);
}
public void add(Component component) {
children.add(component);
}
public void remove(Component component) {
children.remove(component);
}
public void display() {
System.out.println(name);
for (Component component : children) {
component.display();
}
}
}最后,我们可以使用组合模式来创建一个树形结构:
public class CompositePatternDemo {
public static void main(String[] args) {
Component root = new Composite("root");
root.add(new Leaf("Leaf A"));
root.add(new Leaf("Leaf B"));
Component comp = new Composite("Composite X");
comp.add(new Leaf("Leaf XA"));
comp.add(new Leaf("Leaf XB"));
root.add(comp);
Component comp2 = new Composite("Composite Y");
comp2.add(new Leaf("Leaf YA"));
comp2.add(new Leaf("Leaf YB"));
comp.add(comp2);
root.display();
}
}输出结果:
root
Leaf A
Leaf B
Composite X
Leaf XA
Leaf XB
Composite Y
Leaf YA
Leaf YB