設計模式之組合模式

2021-10-07 00:14:24 字數 2162 閱讀 2171

定義: 也叫合成模式,將物件組合成樹形結構以表示「部分-整體」的層次結構,使得使用者對單個物件和組合物件的使用具體有一致性。組合模式是一種結構型設計模式。

組合模式涉及的模型角色:

場景模擬:

乙個很典型的例子就是電腦裡的資料夾。在乙個總資料夾裡面有若干資料夾,若干檔案,裡面資料夾下又有檔案、資料夾。整體上呈現一種樹形的層級結構。像這樣的資料普通寫法是遍歷(遞迴),判斷是整體的話就再寫一層遍歷(繼續遞迴),直到所有部分、整體都訪問一遍。但是這樣寫在層級多的情況下會產生很多相同或類似的**(使用遞迴會比遍歷效果更好一些)。使用組合模式後這種情況就能得到很大的改善(雖然本質還是遍歷)。下面使用組合模式來完成資料夾-檔案場景的編碼。

按照模型角色劃分順序編碼,首先定義好抽象構建:

//抽象構件

public abstract class abstractfile

}

葉子構件(部分)**:

單個物件-文字類檔案(葉子構件)

public class textfile extends abstractfile

@override

public void showcontent()

}單個物件-類檔案(葉子構件)

public class imagefile extends abstractfile

@override

public void showcontent()

}

組合構件(mini版整體)**(樹枝構件):

public class folders extends abstractfile 

public void addfile(abstractfile file)

public void deletefile(abstractfile file)

@override

public void showcontent() }}

場景使用:

abstractfile file1 = new textfile("aaa");

abstractfile file2 = new textfile("bbb");

abstractfile file3 = new textfile("ccc");

abstractfile file4 = new textfile("ddd");

abstractfile image = new imagefile("簡約風格");

folders folder = new folders("e");

folders child1 = new folders("f");

folders child2 = new folders("g");

folder.addfile(file1);

folder.addfile(file2);

folder.addfile(image);

//child1.addfile(file3);

folder.addfile(child1);

//child2.addfile(file4);

folder.addfile(child2);

file3.showcontent();

file4.showcontent();

folder.showcontent();

輸出結果:

從使用外表形式上看,對檔案-資料夾這麼乙個物件的遍歷就僅僅是呼叫乙個方法。使用組合模式後更加直接的感受是無論我是file(部分)還是folder(整體),我對它們的使用方式是沒有區別的。或者說不用去處理我當前的物件是file還是folder。相容性極高。

應用場景:

應用場景:

優點:缺點:

小結

組合模式的終極目的就是讓整體-部分具有一致性,對其可以使用同樣操作(參考上面提到的例子)。當整體-部分具有了一致性的時候可以簡化很多步驟。例如**類應用一般都有乙個購物車。最終結算時要計算乙個總價。在設計上可以將購物車-商品當做乙個整體-部分來設計。計算總價時直接使用抽象構件的獲取**的方法即可。

設計模式之組合模式

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

設計模式之 組合模式

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

設計模式之組合模式

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