组合设计模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。
// Component - 图形接口
interface Graphic {
void draw();
}
// Leaf - 叶子节点:圆形
class Circle implements Graphic {
@Override
public void draw() {
System.out.println("Drawing a Circle");
}
}
// Leaf - 叶子节点:正方形
class Square implements Graphic {
@Override
public void draw() {
System.out.println("Drawing a Square");
}
}
// Composite - 组合节点:图形组合
class CompositeGraphic implements Graphic {
private List<Graphic> childGraphics = new ArrayList<>();
@Override
public void draw() {
for (Graphic graphic : childGraphics) {
graphic.draw();
}
}
// 添加子图形
public void add(Graphic graphic) {
childGraphics.add(graphic);
}
// 移除子图形
public void remove(Graphic graphic) {
childGraphics.remove(graphic);
}
}
// 客户端代码
public class CompositePatternDemo {
public static void main(String[] args) {
// 创建叶子节点
Graphic circle = new Circle();
Graphic square = new Square();
// 创建组合节点
CompositeGraphic composite = new CompositeGraphic();
CompositeGraphic composite2 = new CompositeGraphic();
// 构建组合树结构
composite.add(circle);
composite.add(square);
composite2.add(composite);
composite2.add(new Circle());
// 绘制组合图形
composite2.draw();
}
}
在这个示例中:
Graphic
接口是所有图形组件的共同接口,定义了一个draw
方法。Circle
和Square
类是叶子节点,实现了Graphic
接口的draw
方法。CompositeGraphic
类是组合节点,包含了一组Graphic
对象,并实现了Graphic
接口的draw
方法。它能够添加和移除子节点。CompositePatternDemo
类是客户端代码,展示了如何创建和使用组合图形结构。
通过这种方式,客户端代码可以一致地处理单个对象和组合对象。无论是单个圆形、正方形,还是由这些图形组合而成的复杂结构,客户端都可以通过相同的接口进行操作。