欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

本文以一個簡單實例的形式講述了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)文章

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

    C#下使用XmlDocument操作XML詳解

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

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

    以下是對C#中#region與#if的作用進行了詳細的介紹,需要的朋友可以過來參考下
    2013-09-09
  • C#中 const 和 readonly 的不同

    C#中 const 和 readonly 的不同

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

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

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

    Winform自定義控件在界面拖動、滾動鼠標時閃爍的解決方法

    這篇文章介紹了Winform自定義控件在界面拖動、滾動鼠標時閃爍的解決方法,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-12-12
  • C#多線程學(xué)習之(二)操縱一個線程的方法

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

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

    c# 繪制中國象棋棋盤與棋子

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

    C#圖表算法之有向圖

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

    C#中const和readonly的用法比較

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

    C# winform 請求http的實現(xiàn)(get,post)

    本文主要介紹了C# winform 請求http的實現(xiàn)(get,post),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-06-06

最新評論