C#復(fù)合模式(Composite Pattern)實例教程
本文以一個簡單實例的形式講述了C#復(fù)合模式。分享給大家供大家參考。具體實現(xiàn)方法如下:
一般在顯示樹形結(jié)構(gòu)時,復(fù)合模式有很好的體現(xiàn)。本文實例顯示如下部門結(jié)構(gòu):
如上圖所示,有的節(jié)點包含子節(jié)點,有的節(jié)點不包含子節(jié)點。不管是什么節(jié)點,每個節(jié)點就代表一個部門。
首先設(shè)計一個關(guān)于部門的抽象基類。
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); } }
以上,通過構(gòu)造函數(shù)給屬性賦值,通過PrintSupervisorOf(int spacing)方法打印出節(jié)點的名稱。
接下來設(shè)計包含子節(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é)點的名稱顯示出來。
最后設(shè)計部包含子節(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(); } }
程序運行結(jié)果如下圖所示:
希望本文所述對大家C#程序設(shè)計的學(xué)習有所幫助。
相關(guān)文章
Winform自定義控件在界面拖動、滾動鼠標時閃爍的解決方法
這篇文章介紹了Winform自定義控件在界面拖動、滾動鼠標時閃爍的解決方法,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2021-12-12C# winform 請求http的實現(xiàn)(get,post)
本文主要介紹了C# winform 請求http的實現(xiàn)(get,post),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2022-06-06