Composite Pattern(組合模式)是一種結構型設計模式,旨在將對象組織成樹狀結構,使客戶端對單個對象和組合對象的處理方式保持一致。
Composite Pattern的四個要素:
四個要素的簡單介紹如下:
- 模式名稱:
Composite Pattern(組合模式)
- 問題:
需要以一致的方式處理單個對象和組合對象,並在不同層級結構中運行操作。
- 解決方案:
使用組合模式將對象組織成樹狀結構,其中包含兩種類型的對象:葉子對象和容器對象。葉子對象表示結構的最終節點,而容器對象可以包含子對象,並對子對象進行相同的操作。
- 結果:
組合模式使得客戶端可以對整個結構或單個對象進行統一的操作,同時也可以輕鬆地添加新的對象類型,擴展結構。
在C#中,可以通過以下方式進行Composite Pattern的實作:
建立組合對象的基本抽象類(Component):
public abstract class Component
{
protected string name;
public Component(string name)
{
this.name = name;
}
public abstract void Operation();
}
建立葉子對象(Leaf)繼承自Component:
public class Leaf : Component
{
public Leaf(string name) : base(name)
{
}
public override void Operation()
{
Console.WriteLine($"Leaf {name} is performing operation.");
}
}
建立容器對象(Composite)繼承自Component,並包含子對象的集合:
public class Composite : Component
{
private List<Component> components;
public Composite(string name) : base(name)
{
components = new List<Component>();
}
public void Add(Component component)
{
components.Add(component);
}
public void Remove(Component component)
{
components.Remove(component);
}
public override void Operation()
{
Console.WriteLine($"Composite {name} is performing operation.");
foreach (var component in components)
{
component.Operation();
}
}
}
測試程式碼:
class Program
{
static void Main(string[] args)
{
// 初始化葉子對象
var leaf1 = new Leaf("Leaf 1");
var leaf2 = new Leaf("Leaf 2");
var leaf3 = new Leaf("Leaf 3");
// 初始化容器對象
var composite1 = new Composite("Composite 1");
var composite2 = new Composite("Composite 2");
// 將葉子對象添加到容器中
composite1.Add(leaf1);
composite1.Add(leaf2);
composite2.Add(leaf3);
// 將容器對象添加到容器中,形成結構
composite1.Add(composite2);
// 執行操作
composite1.Operation();
/*
* 輸出結果:
* Composite Composite 1 is performing operation.
* Leaf Leaf 1 is performing operation.
* Leaf Leaf 2 is performing operation.
* Composite Composite 2 is performing operation.
* Leaf Leaf 3 is performing operation.
*/
Console.ReadLine();
}
}
以上程式碼中,我們建立了葉子對象(Leaf)和容器對象(Composite),並通過添加和移除的方式構建了一個結構。 最後,我們調用容器對象的Operation方法,該方法遞歸地調用了所有子對象的Operation方法,實現了一致的操作。
這是Composite Pattern在C#中的基本實現方式。藉助Composite Pattern,您可以方便地處理具有層次結構的對象,同時保持操作的一致性。