亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#復(fù)合模式(Composite Pattern)實(shí)例教程

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

本文以一個(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)文章

  • C#下使用XmlDocument操作XML詳解

    C#下使用XmlDocument操作XML詳解

    本文詳細(xì)講解了C#使用XmlDocument操作XML的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 解析C#中#region與#if的作用

    解析C#中#region與#if的作用

    以下是對(duì)C#中#region與#if的作用進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • C#中 const 和 readonly 的不同

    C#中 const 和 readonly 的不同

    const 和 readonly 的區(qū)別,總是不太清楚,于是查了查資料。
    2013-04-04
  • 基于WPF實(shí)現(xiàn)裁剪圖像功能

    基于WPF實(shí)現(xiàn)裁剪圖像功能

    這篇文章主要為大家詳細(xì)介紹了如何基于WPF實(shí)現(xiàn)裁剪圖像功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-06-06
  • Winform自定義控件在界面拖動(dòng)、滾動(dòng)鼠標(biāo)時(shí)閃爍的解決方法

    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-12
  • C#多線程學(xué)習(xí)之(二)操縱一個(gè)線程的方法

    C#多線程學(xué)習(xí)之(二)操縱一個(gè)線程的方法

    這篇文章主要介紹了C#多線程學(xué)習(xí)之操縱一個(gè)線程的方法,實(shí)例分析了C#中線程的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • c# 繪制中國(guó)象棋棋盤(pán)與棋子

    c# 繪制中國(guó)象棋棋盤(pán)與棋子

    這篇文章主要介紹了c# 繪制中國(guó)象棋棋盤(pán)與棋子,文中實(shí)例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#圖表算法之有向圖

    C#圖表算法之有向圖

    這篇文章介紹了C#圖表算法之有向圖,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#中const和readonly的用法比較

    C#中const和readonly的用法比較

    今天小編就為大家分享一篇關(guān)于C#中const和readonly的用法比較,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • C# winform 請(qǐng)求http的實(shí)現(xiàn)(get,post)

    C# 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

最新評(píng)論