C#復(fù)合模式(Composite Pattern)實(shí)例教程
本文以一個(gè)簡(jiǎn)單實(shí)例的形式講述了C#復(fù)合模式。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
一般在顯示樹(shù)形結(jié)構(gòu)時(shí),復(fù)合模式有很好的體現(xiàn)。本文實(shí)例顯示如下部門(mén)結(jié)構(gòu):
如上圖所示,有的節(jié)點(diǎn)包含子節(jié)點(diǎn),有的節(jié)點(diǎn)不包含子節(jié)點(diǎn)。不管是什么節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)就代表一個(gè)部門(mén)。
首先設(shè)計(jì)一個(gè)關(guān)于部門(mén)的抽象基類(lèi)。
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); } }
以上,通過(guò)構(gòu)造函數(shù)給屬性賦值,通過(guò)PrintSupervisorOf(int spacing)方法打印出節(jié)點(diǎn)的名稱。
接下來(lái)設(shè)計(jì)包含子節(jié)點(diǎn)的節(jié)點(diǎn)。該類(lèi)維護(hù)著DepartmentComponent類(lèi)型的集合,提供方法向這個(gè)集合中添加節(jié)點(diǎn)或從集合中刪除節(jié)點(diǎn)。
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)方法重寫(xiě)了抽象基類(lèi)的方法,不僅把本節(jié)點(diǎn)的名稱打印出來(lái),還使用遞歸把所有子節(jié)點(diǎn)的名稱顯示出來(lái)。
最后設(shè)計(jì)部包含子節(jié)點(diǎn)的節(jié)點(diǎn)。
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("銷(xiāo)售部1"); Department zhangsan = new Department("張三"); Department lisi = new Department("李四"); DepartmentComposite salesDepartment2 = new DepartmentComposite("銷(xiāo)售部2"); DepartmentComposite specialDepartment = new DepartmentComposite("銷(xiāo)售部2特別行動(dòng)組"); Department wangwu = new Department("王五"); Department zhaoliu = new Department("趙六"); DepartmentComposite salesDepartment = new DepartmentComposite("銷(xiāo)售部"); 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(); } }
程序運(yùn)行結(jié)果如下圖所示:
希望本文所述對(duì)大家C#程序設(shè)計(jì)的學(xué)習(xí)有所幫助。
相關(guān)文章
Winform自定義控件在界面拖動(dòng)、滾動(dòng)鼠標(biāo)時(shí)閃爍的解決方法
這篇文章介紹了Winform自定義控件在界面拖動(dòng)、滾動(dòng)鼠標(biāo)時(shí)閃爍的解決方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12C#多線程學(xué)習(xí)之(二)操縱一個(gè)線程的方法
這篇文章主要介紹了C#多線程學(xué)習(xí)之操縱一個(gè)線程的方法,實(shí)例分析了C#中線程的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04C# winform 請(qǐng)求http的實(shí)現(xiàn)(get,post)
本文主要介紹了C# winform 請(qǐng)求http的實(shí)現(xiàn)(get,post),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06