C#復合模式(Composite Pattern)實例教程
本文以一個簡單實例的形式講述了C#復合模式。分享給大家供大家參考。具體實現(xiàn)方法如下:
一般在顯示樹形結構時,復合模式有很好的體現(xiàn)。本文實例顯示如下部門結構:

如上圖所示,有的節(jié)點包含子節(jié)點,有的節(jié)點不包含子節(jié)點。不管是什么節(jié)點,每個節(jié)點就代表一個部門。
首先設計一個關于部門的抽象基類。
public abstract class DepartmentComponent
{
public string Name { private set; get; }
public DepartmentComponent(string name)
{
this.Name = name;
}
public virtual void PrintSupervisorOf(int spacing)
{
for (int counter = 0; counter < spacing; counter++)
{
Console.Write(" ");
}
Console.WriteLine(Name);
}
}
以上,通過構造函數(shù)給屬性賦值,通過PrintSupervisorOf(int spacing)方法打印出節(jié)點的名稱。
接下來設計包含子節(jié)點的節(jié)點。該類維護著DepartmentComponent類型的集合,提供方法向這個集合中添加節(jié)點或從集合中刪除節(jié)點。
public class DepartmentComposite : DepartmentComponent
{
private IList<DepartmentComponent> employees;
public DepartmentComposite(string name) : base(name)
{
employees = new List<DepartmentComponent>();
}
public void AddDepartment(DepartmentComponent e)
{
employees.Add(e);
}
public void RemoveDepartment(DepartmentComponent e)
{
employees.Remove(e);
}
public override void PrintSupervisorOf(int spacing)
{
base.PrintSupervisorOf(spacing);
foreach (DepartmentComponent e in employees)
{
e.PrintSupervisorOf(spacing + 1);
}
}
}
以上 PrintSupervisorOf(int spacing)方法重寫了抽象基類的方法,不僅把本節(jié)點的名稱打印出來,還使用遞歸把所有子節(jié)點的名稱顯示出來。
最后設計部包含子節(jié)點的節(jié)點。
public class Department : DepartmentComponent
{
public Department(string name) : base(name)
{
}
public override void PrintSupervisorOf(int spacing)
{
base.PrintSupervisorOf(spacing);
}
}
客戶端部分。
class Program
{
static void Main(string[] args)
{
DepartmentComposite salesDepartment1 = new DepartmentComposite("銷售部1");
Department zhangsan = new Department("張三");
Department lisi = new Department("李四");
DepartmentComposite salesDepartment2 = new DepartmentComposite("銷售部2");
DepartmentComposite specialDepartment = new DepartmentComposite("銷售部2特別行動組");
Department wangwu = new Department("王五");
Department zhaoliu = new Department("趙六");
DepartmentComposite salesDepartment = new DepartmentComposite("銷售部");
salesDepartment.AddDepartment(salesDepartment1);
salesDepartment.AddDepartment(salesDepartment2);
salesDepartment1.AddDepartment(zhangsan);
salesDepartment1.AddDepartment(lisi);
salesDepartment2.AddDepartment(specialDepartment);
specialDepartment.AddDepartment(wangwu);
specialDepartment.AddDepartment(zhaoliu);
salesDepartment.PrintSupervisorOf(0);
Console.ReadKey();
}
}
程序運行結果如下圖所示:

希望本文所述對大家C#程序設計的學習有所幫助。
相關文章
Winform自定義控件在界面拖動、滾動鼠標時閃爍的解決方法
這篇文章介紹了Winform自定義控件在界面拖動、滾動鼠標時閃爍的解決方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-12-12
C# winform 請求http的實現(xiàn)(get,post)
本文主要介紹了C# winform 請求http的實現(xiàn)(get,post),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06

