組合設計模式(Composite Pattern)是一種結構型設計模式,它允許你將對象組合成樹形結構來表示“部分-整體”的層次結構。組合模式使得客戶端對單個對象和組合對象的使用具有一致性。
// Component - 圖形接口
interface Graphic {void draw();
}// Leaf - 葉子節點:圓形
class Circle implements Graphic {@Overridepublic void draw() {System.out.println("Drawing a Circle");}
}// Leaf - 葉子節點:正方形
class Square implements Graphic {@Overridepublic void draw() {System.out.println("Drawing a Square");}
}// Composite - 組合節點:圖形組合
class CompositeGraphic implements Graphic {private List<Graphic> childGraphics = new ArrayList<>();@Overridepublic 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
類是客戶端代碼,展示了如何創建和使用組合圖形結構。
通過這種方式,客戶端代碼可以一致地處理單個對象和組合對象。無論是單個圓形、正方形,還是由這些圖形組合而成的復雜結構,客戶端都可以通過相同的接口進行操作。