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

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í)例顯示如下部門結(jié)構(gòu):

如上圖所示,有的節(jié)點(diǎn)包含子節(jié)點(diǎn),有的節(jié)點(diǎn)不包含子節(jié)點(diǎn)。不管是什么節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)就代表一個(gè)部門。

首先設(shè)計(jì)一個(gè)關(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);
    }
}

以上,通過(guò)構(gòu)造函數(shù)給屬性賦值,通過(guò)PrintSupervisorOf(int spacing)方法打印出節(jié)點(diǎn)的名稱。

接下來(lái)設(shè)計(jì)包含子節(jié)點(diǎn)的節(jié)點(diǎn)。該類維護(hù)著DepartmentComponent類型的集合,提供方法向這個(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ě)了抽象基類的方法,不僅把本節(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("銷售部1");
      Department zhangsan = new Department("張三");
      Department lisi = new Department("李四");
      DepartmentComposite salesDepartment2 = new DepartmentComposite("銷售部2");
      DepartmentComposite specialDepartment = new DepartmentComposite("銷售部2特別行動(dòng)組");
      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();
    }
}

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

希望本文所述對(duì)大家C#程序設(shè)計(jì)的學(xué)習(xí)有所幫助。

相關(guān)文章

  • 解析StreamReader與文件亂碼問(wèn)題的解決方法

    解析StreamReader與文件亂碼問(wèn)題的解決方法

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

    C#實(shí)現(xiàn)12306自動(dòng)登錄的方法

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

    C#與C++與互操作實(shí)例講解

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

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

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

    C# winform操作CSV格式文件

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

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

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

    C#使用Consul集群進(jìn)行服務(wù)注冊(cè)與發(fā)現(xiàn)

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

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

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

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

    在設(shè)計(jì)模式的策略模式中,需要?jiǎng)討B(tài)加載程序集信息,本文通過(guò)一個(gè)簡(jiǎn)單的實(shí)例,來(lái)講解動(dòng)態(tài)加載Dll需要的知識(shí)點(diǎn)。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • c#爬蟲(chóng)爬取京東的商品信息

    c#爬蟲(chóng)爬取京東的商品信息

    這篇文章主要給大家介紹了關(guān)于利用c#爬蟲(chóng)爬取京東商品信息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評(píng)論

湖州市| 日照市| 榆树市| 襄汾县| 周口市| 林口县| 禹州市| 富民县| 蒙城县| 鲁山县| 双桥区| 沙坪坝区| 英超| 扎鲁特旗| 诏安县| 荣成市| 滦平县| 大连市| 巴彦淖尔市| 富平县| 锡林浩特市| 柳江县| 花莲县| 徐汇区| 临江市| 平乡县| 车险| 霍州市| 龙游县| 友谊县| 肇东市| 明光市| 漳平市| 朝阳市| 仲巴县| 德格县| 云梦县| 青浦区| 盘锦市| 遂昌县| 中西区|