最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2014年09月12日 16:40:31   投稿:shichen2014  
這篇文章主要介紹了C#復合模式(Composite Pattern),以實例形式講述了復合模式在樹形結(jié)構(gòu)中的應用,需要的朋友可以參考下

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

一般在顯示樹形結(jié)構(gòu)時,復合模式有很好的體現(xiàn)。本文實例顯示如下部門結(jié)構(gòu):

如上圖所示,有的節(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);
    }
}

以上,通過構(gòu)造函數(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();
    }
}

程序運行結(jié)果如下圖所示:

希望本文所述對大家C#程序設計的學習有所幫助。

相關文章

  • 解析StreamReader與文件亂碼問題的解決方法

    解析StreamReader與文件亂碼問題的解決方法

    本篇文章是對StreamReader與文件亂碼問題的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#實現(xiàn)12306自動登錄的方法

    C#實現(xiàn)12306自動登錄的方法

    本文介紹了C#實現(xiàn)12306自動登錄的方法,主要方法是捕獲參數(shù)和url并補充參數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-07-07
  • C#與C++與互操作實例講解

    C#與C++與互操作實例講解

    在本篇文章里小編給大家整理了關于C#與C++與互操作實例以及相關內(nèi)容,需要的朋友們可以學習下。
    2019-08-08
  • C#多線程TPL常見操作誤區(qū)與異常處理

    C#多線程TPL常見操作誤區(qū)與異常處理

    本文詳細講解了C#多線程TPL常見操作誤區(qū)與異常處理,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C# winform操作CSV格式文件

    C# winform操作CSV格式文件

    這篇文章主要為大家詳細介紹了C#在winform中的表格操作CSV格式文件的相關實例,文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下
    2025-03-03
  • Unity實現(xiàn)QQ列表折疊菜單

    Unity實現(xiàn)QQ列表折疊菜單

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)QQ列表折疊菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#使用Consul集群進行服務注冊與發(fā)現(xiàn)

    C#使用Consul集群進行服務注冊與發(fā)現(xiàn)

    這篇文章主要介紹了C#使用Consul集群進行服務注冊與發(fā)現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 基于WebClient實現(xiàn)Http協(xié)議的Post與Get對網(wǎng)站進行模擬登陸和瀏覽實例

    基于WebClient實現(xiàn)Http協(xié)議的Post與Get對網(wǎng)站進行模擬登陸和瀏覽實例

    這篇文章主要介紹了基于WebClient實現(xiàn)Http協(xié)議的Post與Get對網(wǎng)站進行模擬登陸和瀏覽的方法,以實例形式詳細分析了WebClient模擬POST與GET登陸與瀏覽的過程,對于C#項目開發(fā)來說具有不錯的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • C# 動態(tài)加載程序集信息

    C# 動態(tài)加載程序集信息

    在設計模式的策略模式中,需要動態(tài)加載程序集信息,本文通過一個簡單的實例,來講解動態(tài)加載Dll需要的知識點。下面跟著小編一起來看下吧
    2017-03-03
  • c#爬蟲爬取京東的商品信息

    c#爬蟲爬取京東的商品信息

    這篇文章主要給大家介紹了關于利用c#爬蟲爬取京東商品信息的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們隨著小編來一起學習學習吧
    2018-11-11

最新評論

阿坝县| 开原市| 北票市| 灵宝市| 沁水县| 黄冈市| 屯昌县| 临夏县| 和林格尔县| 二手房| 山西省| 汤原县| 宁波市| 紫金县| 恩平市| 习水县| 巴里| 敦化市| 天门市| 鸡东县| 建湖县| 南城县| 丹巴县| 青田县| 治多县| 汝城县| 开原市| 黎平县| 五大连池市| 韩城市| 南安市| 乳源| 临沧市| 自治县| 武平县| 焉耆| 上虞市| 佛山市| 南京市| 田林县| 都匀市|