>>回傳《C#常用設計模式》
- 1. 簡介
- 2. 示例
- 3. 適用環境
1. 簡介
- 定義
- 組合多個物件形成樹形結構以表示具有部分-整體關系的層次結構,
- 組合模式讓呼叫程式可以統一對待單個物件和組合物件
- 案例
- 例如檔案系統的檔案夾和檔案結構就是此模式
- winform中,空間的基類是Control型別,子類有的是單一型別(Textbox),有的是容器型別(Panel),Add和Remove方法使用暴露Collections的方式,都有方法(eachChild)
2. 示例
namespace WindowsFormsApplication1
{
//抽象的部件類描述將來所有部件共有的行為
public abstract class Component
{
protected string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
//添加部件
public abstract void Add(Component component);
//洗掉部件
public abstract void Remove(Component component);
//遍歷所有子部件
public abstract void eachChild();
}
//組合部件類
public class Leaf : Component
{
//葉子節點不具備添加的能力,所以不實作
public override void Add(Component component)
{
throw new NotImplementedException();
}
//葉子節點不具備添加的能力必然也不能洗掉
public override void Remove(Component component)
{
throw new NotImplementedException();
}
//葉子節點沒有子節點所以顯示自己的執行結果
public override void eachChild()
{
Console.WriteLine("{0}執行了..", name);
}
}
//組合類
public class Composite : Component
{
//用來保存組合的部件
List<Component> myList = new List<Component>();
//添加節點 添加部件
public override void Add(Component component)
{
myList.Add(component);
}
//洗掉節點 洗掉部件
public override void Remove(Component component)
{
myList.Remove(component);
}
//遍歷子節點
public override void eachChild()
{
Console.WriteLine("{0}執行了..", name);
foreach (Component c in myList)
{
c.eachChild();
}
}
}
class Client
{
static void Main(string[] args)
{
//構造根節點
Composite rootComponent = new Composite();
rootComponent.Name = "根節點";
//添加兩個葉子幾點,也就是子部件
Leaf l = new Leaf();
l.Name = "葉子節點一";
Leaf l1 = new Leaf();
l1.Name = "葉子節點二";
rootComponent.Add(l);
rootComponent.Add(l1);
//遍歷組合部件
rootComponent.eachChild();
}
}
}
3. 適用環境
- 在具有整體和部分層次的結構中,希望通過一種方式忽略整體與部分的差異,一致的對待它們
- 在一個使用面向物件語言開發的系統中要處理一個樹形結構時
- 在一個系統總能夠分離出葉子和容器物件,而且它們的型別不固定,需要增加一些新的型別
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/260180.html
標籤:設計模式
上一篇:Bridge橋接模式
下一篇:Bridge橋接模式
