c# 組合模式
更新時間:2012年10月29日 14:02:53 作者:
組合模式:將對象組合成樹形結構以表示‘部分-整體’的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。需求中式體現(xiàn)部分與整體層次的結構時,統(tǒng)一地使用組合對象中的所有對象時,應該考慮使用組合模式
結構圖:

抽象對象:
abstract class Component
{
protected string name;
public Component(string name)
{
this.name = name;
}
public abstract void Add(Component c);
public abstract void Remove(Component c);
public abstract void Display(int depth);
}
無子節(jié)點的:
class Leaf : Component
{
public Leaf(string name)
: base(name)
{ }
public override void Add(Component c)
{
//throw new NotImplementedException();
Console.WriteLine("Cannot add to a Leaf");
}
public override void Remove(Component c)
{
//throw new NotImplementedException();
Console.WriteLine("Cannot remove to a Leaf");
}
public override void Display(int depth)
{
//throw new NotImplementedException();
Console.WriteLine(new string('-', depth) + name);
}
}
可以有子結點:
class Composite : Component
{
private List<Component> children = new List<Component>();
public Composite(string name)
: base(name)
{ }
public override void Add(Component c)
{
//throw new NotImplementedException();
children.Add(c);
}
public override void Remove(Component c)
{
//throw new NotImplementedException();
children.Remove(c);
}
public override void Display(int depth)
{
//throw new NotImplementedException();
Console.WriteLine(new string('-', depth) + name);
foreach (Component component in children)
{
component.Display(depth + 2);
}
}
}
主函數調用:
class Program
{
static void Main(string[] args)
{
Composite root = new Composite("root");
root.Add(new Leaf("Leaf A"));
root.Add(new Leaf("Leaf B"));
Composite comp = new Composite("Composite X");
comp.Add(new Leaf("Leaf XA"));
comp.Add(new Leaf("Leaf XB"));
root.Add(comp);
Composite comp2 = new Composite("Composite X");
comp2.Add(new Leaf("Leaf XYA"));
comp2.Add(new Leaf("Leaf XYB"));
comp.Add(comp2);
root.Display(1);
Console.ReadKey();
}
}

抽象對象:
復制代碼 代碼如下:
abstract class Component
{
protected string name;
public Component(string name)
{
this.name = name;
}
public abstract void Add(Component c);
public abstract void Remove(Component c);
public abstract void Display(int depth);
}
無子節(jié)點的:
復制代碼 代碼如下:
class Leaf : Component
{
public Leaf(string name)
: base(name)
{ }
public override void Add(Component c)
{
//throw new NotImplementedException();
Console.WriteLine("Cannot add to a Leaf");
}
public override void Remove(Component c)
{
//throw new NotImplementedException();
Console.WriteLine("Cannot remove to a Leaf");
}
public override void Display(int depth)
{
//throw new NotImplementedException();
Console.WriteLine(new string('-', depth) + name);
}
}
可以有子結點:
復制代碼 代碼如下:
class Composite : Component
{
private List<Component> children = new List<Component>();
public Composite(string name)
: base(name)
{ }
public override void Add(Component c)
{
//throw new NotImplementedException();
children.Add(c);
}
public override void Remove(Component c)
{
//throw new NotImplementedException();
children.Remove(c);
}
public override void Display(int depth)
{
//throw new NotImplementedException();
Console.WriteLine(new string('-', depth) + name);
foreach (Component component in children)
{
component.Display(depth + 2);
}
}
}
主函數調用:
復制代碼 代碼如下:
class Program
{
static void Main(string[] args)
{
Composite root = new Composite("root");
root.Add(new Leaf("Leaf A"));
root.Add(new Leaf("Leaf B"));
Composite comp = new Composite("Composite X");
comp.Add(new Leaf("Leaf XA"));
comp.Add(new Leaf("Leaf XB"));
root.Add(comp);
Composite comp2 = new Composite("Composite X");
comp2.Add(new Leaf("Leaf XYA"));
comp2.Add(new Leaf("Leaf XYB"));
comp.Add(comp2);
root.Display(1);
Console.ReadKey();
}
}
相關文章
C# 使用 WebBrowser 實現(xiàn) HTML 轉圖片功能的示例代碼
這篇文章主要介紹了C# 如何使用 WebBrowser 實現(xiàn) HTML 轉圖片功能,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下2020-07-07C# Winform中DataGridView導出為Excel的實現(xiàn)示例
本文主要介紹了C# Winform中DataGridView導出為Excel的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05