国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#復合模式(Composite Pattern)實例教程

2020-01-24 02:25:18
字體:
來源:轉載
供稿:網友

本文以一個簡單實例的形式講述了C#復合模式。分享給大家供大家參考。具體實現方法如下:

一般在顯示樹形結構時,復合模式有很好的體現。本文實例顯示如下部門結構:

如上圖所示,有的節點包含子節點,有的節點不包含子節點。不管是什么節點,每個節點就代表一個部門。

首先設計一個關于部門的抽象基類。

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);    }}

以上,通過構造函數給屬性賦值,通過PrintSupervisorOf(int spacing)方法打印出節點的名稱。

接下來設計包含子節點的節點。該類維護著DepartmentComponent類型的集合,提供方法向這個集合中添加節點或從集合中刪除節點。

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)方法重寫了抽象基類的方法,不僅把本節點的名稱打印出來,還使用遞歸把所有子節點的名稱顯示出來。

最后設計部包含子節點的節點。

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#程序設計的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永清县| 乐都县| 甘德县| 鄢陵县| 天峻县| 神农架林区| 大兴区| 平山县| 晋江市| 托里县| 虹口区| 齐河县| 吉木萨尔县| 红桥区| 陕西省| 亚东县| 双牌县| 海宁市| 那曲县| 巨野县| 南和县| 潮安县| 壶关县| 高要市| 普兰店市| 东辽县| 衡阳县| 岚皋县| 镇安县| 沙洋县| 衡阳县| 洮南市| 英吉沙县| 铜川市| 宜丰县| 延寿县| 隆昌县| 香港| 疏勒县| 四子王旗| 永定县|