設計模式 之 組合

2022-09-23 20:21:09 字數 3107 閱讀 6057

組合模式(composite)

將物件組合成樹形結構以表示「部分-整體」的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。

在我們提高班,有這樣的乙個組織,它不屬於具體的哪一期,只屬於整個提高班,那就是我們的機房管理委員會。無可厚非的是不管是哪個部門,大boss都是我們尊敬的公尺老師。在這裡我只表現出了我們每一期的分工結構。在機房管理委員會中,總負責人為九期-許恕,下面是十期總負責人-羅智福,然後下面是十期的四個部門負責人:網路部門:屈文哲;網線-交換機部門:孫一清和我;伺服器部門:邱慕夏;工具部門:王慶波;在我們十期下面還有十一期的內部成員。整個結構,每層都有每層的分工,每個人都有各自負責的工作,但是我們的宗旨只有乙個:全心全意為人民服務!可能大家還是不太理解,下面就來看**吧:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

using system.collections;

namespace 組合

//增加

public abstract void add(abshead head);

//刪除

public abstract void remove(abshead head);

//顯示

public abstract void display(int depth);

//履行職責

public abstract void lineofduty();

}//具體負責人,樹枝節點

public class head:abshead

public override void add(abshead head)

public override void remove(abshead head)

public override void display(int depth)

}public override void lineofduty()}}

//網路部門內部成員 樹葉節點

public class network:abshead

public override void add(abshead head)

public override void remove(abshead head)

public override void display(int depth)

public override void lineofduty()

網路部門:負責機房的ip-mac繫結、重灌系統檢查",name);}}

//網線部門內部成員 樹葉節點

public class switch : abshead

public override void add(abshead head)

public override void remove(abshead head)

public override void display(int depth)

public override void lineofduty()

網線部門:負責機房網線的通暢", name);}}

//伺服器部門內部成員 樹葉節點

public class server : abshead

public override void add(abshead head)

public override void remove(abshead head)

public override void display(int depth)

public override void lineofduty()

伺服器部門:負責機房的監控、印表機、伺服器", name);}}

//工具部門內部成員 樹葉節點

public class tool : abshead

public override void add(abshead head)

public override void remove(abshead head)

public override void display(int depth)

public override void lineofduty()

工具部門:負責機房所有工具的管理", name);}}

class program}}

組合模式類圖:

在組合模式結構圖中包含如下幾個角色:

component(抽象構件):它可以是介面或抽象類,為葉子構件和容器構件物件宣告介面,在該角色中可以包含所有子類共有行為的宣告和實現。在抽象構件中定義了訪問及管理它的子構件的方法,如增加子構件、刪除子構件、獲取子構件等。

leaf(葉子構件):它在組合結構中表示葉子節點物件,葉子節點沒有子節點,它實現了在抽象構件中定義的行為。對於那些訪問及管理子構件的方法,可以通過異常等方式進行處理。

composite(樹枝構件):它在組合結構中表示樹枝節點物件,樹枝點包含子節點,其子節點可以是葉子節點,也可以是樹枝節點,它提供乙個集合用於儲存子節點,實現了在抽象構件中定義的行為,包括那些訪問及管理子構件的方法,在其業務方法中可以遞迴呼叫其子節點的業務方法。

主要優點

1.組合模式可以清楚地定義分層次的複雜物件,表示物件的全部或部分層次,它讓客戶端忽略了層次的差異,方便對整個層次結構進行控制。

2.客戶端可以一致地使用乙個組合結構或其中單個物件,不必關心處理的是單個物件還是整個組合結構,簡化了客戶端**。

3.在組合模式中增加新的容器構件和葉子構件都很方便,無須對現有類庫進行任何修改,符合「開閉原則」。

4.組合模式為樹形結構的物件導向實現提供了一種靈活的解決方案,通過葉子物件和容器物件的遞迴組合,可以形成複雜的樹形結構,但對樹形結構的控制卻非常簡單。

個人認為:組合的優點在於定義了包含基本物件(葉子節點)和組合物件(樹枝節點)的類的層次結構。基本物件(葉子節點)可以被組合成更複雜的組合物件(樹枝節點),而這個組合物件(樹枝節點)又可以被組合,這樣不斷地遞迴,在客戶**中,任何用到基本物件的地方都可以使用組合物件。

適用場景

1.想表示物件的「部分-整體」層次結構的時候

2.希望使用者忽略組合物件與單個物件的不同,使用者將統一使用組合結構中的所有物件的時候

設計模式之組合模式

組合模式 以 整體 部分 的層次結構,將物件以樹型結構組合起來。如下圖所示 組合模式首先得定義乙個用來管理和訪問部件們的抽象類。public abstract class equipment 再建立乙個組合體的部件 class element equipment 現在我們再來定義乙個組合體,也就是組...

設計模式之 組合模式

有時候我們需要維護一些物件,這些物件具有一定的層次結構,它們之間雖然差異很大,但在使用的時候我們希望能構一致的對待,比如windows控制項,繪圖中的圖形等,這個時候我們就可以採用組合模式來進行管理。組合模式就是將要管理的物件按樹型結構來進行組織,表示成一種 整體 部分 的層次結構,使得使用者對單個...

設計模式之組合模式

組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。使得使用者對單個物件和組合物件的使用具有一致性。適用性 想表示物件的部分 整體層次結構,希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。典型表示結構圖 宣告組合中的物件宣告介面 在適當的情況下,實現所有類共...