组合模式(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