組合模式之拼湊的美好

2021-09-06 15:54:29 字數 2211 閱讀 2966

廊坊的風一如既往的在窗外刮著,天地間肆意地飄灑,縱情在一剎那,為何如今僅僅剩下風吹亂我的發,亂蓬蓬的,還是去超市逛逛吧,買吃的`(*∩_∩*)′,走進華聯超市,熱情的店員招呼著我,開始為我介紹,推薦各種各樣商品,店員向我推薦了他們的會員卡,全場全部專案均八折,每逢節假日打五折,我心想那太划算了,並且他們總店,分店,加盟店都能夠用,所以就辦了張會員卡。今天我們的設計模式就從超市會員卡開始說起。

這個儼然就是我們設計模式中的組合模式----組合模式有時候又叫做部分-總體模式,它使我們樹型結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程式能夠向處理簡單元素一樣來處理複雜元素,從而使得客戶程式與複雜元素的內部結構解耦。看以下的兩幅:

上面兩幅我們能夠看做是乙個檔案結構,對於這種結構我們稱之為樹形結構。在《大話設計模式》中我們了解到能夠通過呼叫某個方法來遍歷整個樹,當我們找到某個葉子節點後,就能夠對葉子節點進行相關的操作。我們能夠將這顆樹理解成乙個大的容器,容器裡面包括非常多的成員物件,這些成員物件就可以是容器物件也能夠是葉子物件。可是因為容器物件和葉子物件在功能上面的差別,使得我們在使用的過程中必需要區分容器物件和葉子物件,可是這樣就會給客戶帶來不必要的麻煩,對於客戶而言,始終希望能夠一致的對待容器物件和葉子物件。這就是組合模式的設計動機:組合模式定義了怎樣將容器物件和葉子物件進行遞迴組合,使得客戶在使用的過程中無須進行區分,能夠對他們進行一致的處理。以下一起來看一下組合模式的結構圖:

以上述在華聯超市辦會員卡為例,看看組合模式是怎樣在**中實現:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

}/// /// 店面類 抽象出來的店面部件

///

public abstract class storefront

}//加入店面

public abstract void add(storefront store);

//刪除店面

public abstract void remove(storefront store);

//定義所有部件公用的行為 刷卡行為

public abstract void paybycard();

}public class storeorbranch : storefront

public storeorbranch(string storename)

listmystorelist = new list();

//刷卡消費

public override void paybycard()

的積分已累加進該會員卡", storename);

foreach (storefront sf in mystorelist)

}//新增店面

public override void add(storefront store)

//解除店面

public override void remove(storefront store)

}public class joininstore : storefront

public joininstore(string storename)

//刷卡消費

public override void paybycard()

的積分已累加進該會員卡", storename);

}public override void add(storefront store)

public override void remove(storefront store)}}

組合模式的目的是:讓client不再區分操作的是組合物件還是葉子物件,而是以乙個統一的方式來操作。實現這個目標的關鍵之處,是設計乙個抽象的元件類,讓它能夠代表組合物件和葉子物件。這樣一來,client就不用區分究竟是組合物件還是葉子物件了,僅僅須要所有當成元件物件進行統一的操作就能夠了。

組合模式 設計模式系列之組合模式解析

今天為大家帶來死磕設計模式系列的第11個模式,屬於結構型模式的 組合模式。什麼是組合模式?組合模式解決了什麼問題?適用場景是什麼?將物件組合成樹形結構以表示 部分 整體 的層次結構。composite 使得使用者對單個物件和組合物件的使用具有一致性。如果業務中需要定義複雜的資料結構,可以用樹形巢狀來...

設計模式之組合模式

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

設計模式之 組合模式

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