日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c#设计12星座速配软件_C#设计模式(12)——组合模式

發布時間:2023/12/2 C# 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#设计12星座速配软件_C#设计模式(12)——组合模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱讀目錄

1.組合模式

在軟件開發中我們經常會遇到處理部分與整體的情況,如我們經常見到的樹形菜單,一個菜單項的子節點可以指向具體的內容,也可以是子菜單。類似的情況還有文件夾,文件夾的下級可以是文件夾也可以是文件。舉一個例子:一個公司的組織架構是這樣的,首先是總公司,總公司下邊有直屬員工和各個部門,各個部門下邊有本部門的子部門和員工。我們去怎么去獲取這個公司的組織架構呢(就是有層次地遍歷出公司的部門名和員工名)?

組合模式可以很好地解決這類問題,組合模式通過讓樹形結構的葉子節點和樹枝節點使用同樣的接口,結合遞歸的思想來處理部分與整體關系,這種方式模糊了簡單對象(葉子)和對象組(樹枝)間的概念,讓我們可以像處理單個對象一樣去處理對象組。

樹葉和樹枝都要使用相同的接口,所以先創建一個抽象類,其內部定義了樹枝和樹葉的公共接口:

///

/// 抽象部件 定義了樹枝和樹葉的公共屬性和接口

///

public abstract class Component

{

public string name;

public Component(string name)

{

this.name = name;

}

//添加子節點

public abstract void Add(Component c);

//刪除子節點

public abstract void Remove(Component c);

//展示方法,dept為節點深度

public abstract void Display(int dept);

}

員工類,相當于樹葉,沒有下一級:

//具體員工,樹形結構的Leaf

public class Employee : Component

{

public Employee(string name):base(name)

{

this.name = name;

}

//Leaf不能添加/刪除子節點所以空實現

public override void Add(Component c)

{

}

public override void Remove(Component c)

{

}

public override void Display(int dept)

{

Console.WriteLine(new string('-', dept)+name);

}

}

部門類,相當于樹枝,下邊的節點可有有子部門,也可以有員工:

///

/// 部門類,相當于樹枝

///

public class Depart : Component

{

public Depart(string name) : base(name)

{

this.name = name;

}

//添加子節點

public List children=new List();

public override void Add(Component c)

{

children.Add(c);

}

//刪除子節點

public override void Remove(Component c)

{

children.Remove(c);

}

//展示自己和和內部的所有子節點,這里是組合模式的核心

public override void Display(int dept)

{

Console.WriteLine(new string('-',dept)+name);

foreach (var item in children)

{

//這里用到了遞歸的思想

item.Display(dept + 4);

}

}

}

客戶端調用:

class Program

{

static void Main(string[] args)

{

Component DepartA = new Depart("A總公司");

Component DepartAX = new Depart("AX部門");

Component DepartAY = new Depart("AY部門");

Component DepartAX1 = new Depart("AX1子部門");

Component DepartAX2 = new Depart("AX2子部門");

Component Ae1 = new Employee("公司直屬員工1");

Component AXe1= new Employee("AX部門員工1");

Component AX1e1= new Employee("AX1部門員工1");

Component AX1e2= new Employee("AX1部門員工2");

Component AYe1= new Employee("AY部門員工1");

Component AYe2= new Employee("AY部門員工2");

DepartA.Add(Ae1);

DepartA.Add(DepartAX);

DepartA.Add(DepartAY);

DepartAX.Add(AXe1);

DepartAX.Add(DepartAX1);

DepartAX.Add(DepartAX2);

DepartAX1.Add(AX1e1);

DepartAX1.Add(AX1e2);

DepartAY.Add(AYe1);

DepartAY.Add(AYe2);

//遍歷總公司

DepartA.Display(1);

Console.ReadKey();

}

}

運行結果如下:

上邊的例子中部門類中包含了一個List children,這個List內部裝的是該部門的子節點,這些子節點可以是子部門也可以是員工,在部門類的Display方法中通過foreach來遍歷每一個子節點,如果子節點是員工則直接調用員工類中的Display方法打印出名字;如果子節點是子部門,調用部門類的Display遍歷子部門的下級節點,直到下級節點只有員工或者沒有下級節點為止。這里用到了遞歸的思想。

2.小結

上邊例子的類圖

組合模式的使用場景:當我們處理部分-整體的層次結構時,希望使用統一的接口來處理部分和整體時使用。

組合模式的優點:在樹形結構的處理中模糊了對象和對象組的概念,使用對象和對象組采用了統一的接口,讓我們可以像處理簡單對象一樣處理對象組。

總結

以上是生活随笔為你收集整理的c#设计12星座速配软件_C#设计模式(12)——组合模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。