組合模式用的很少
組合模式跟我們之前講的物件導向設計中的「組合關係(通過組合來組裝兩個類)」,完全是兩碼事。這裡講的「組合模式」,主要是用來處理樹形結構資料。這裡的「資料」,
將一組物件組織(compose)成樹形結構,以表示一種「部分-整體」的層次結構。組合讓客戶端(在很多設計模式書籍
中,「客戶端」代指**的使用者。)可以統一單個物件和組合物件的處理邏輯。『
假設我們有這樣乙個需求:設計乙個類來表示檔案系統中的目錄,能方便地實現下面這些功能:
動態地新增、刪除某個目錄下的子目錄或檔案;
統計指定目錄下的檔案個數;
統計指定目錄下的檔案總大小。
public
abstract
class
filesystemnode
public
abstract
intcountnumoffiles()
;public
abstract
long
countsizeoffiles()
;public string getpath()
}public
class
file
extends
filesystemnode
@ override
public
intcountnumoffiles()
@ override
public
long
countsizeoffiles()
}public
class
directory
extends
filesystemnode
@override
public
intcountnumoffiles()
return numoffiles;
}@override
public
long
countsizeoffiles()
return sizeoffiles;
}public
void
addsubnode
(filesystemnode fileordir)
public
void
removesubnode
(filesystemnode fileordir)}if
(i < size)
}}
我們對照著這個例子,再重新看一下組合模式的定義:
將一組物件(檔案和目錄)組織成樹形結構,以表示一種『部分-整體』的層次結構(目錄與子目錄的巢狀結構)。組合模式讓客戶端可以統一單個物件(檔案)和組合物件(目錄)的處理邏輯(遞迴遍歷)。
組合模式的設計思路,與其說是一種設計模式,倒不如說是對業務場景的一種資料結構和演算法的抽象。其中,資料可以表示成樹這種資料結構,業務需求可以通過在樹上的遞迴遍歷演算法來實現。
組合模式,將一組物件組織成樹形結構,將單個物件和組合物件都看做樹中的節點,以統一處理邏輯,並且它利用樹形結構的特點,遞迴地處理每個子樹,依次簡化**實現。使用組合模式的前提在於,你的業務場景必須能夠表示成樹形結構。所以,組合模式的應用場景也比較局
限,它並不是一種很常用的設計模式。
應用: 部門,員工屬性結構
GoLang設計模式20 組合模式
組合模式是一種結構型設計模式。當我們想把一組物件當做乙個整體來處理時就可以考慮使用組合模式。組合模式被視為是介面型設計模式是因為它將一組物件組裝為乙個樹狀結構。這個樹狀結構中的每個獨立元件都可以用同樣的方式來處理 無論它們是複雜的還是原始的。以計算機作業系統中的檔案系統為例。在檔案系統中有檔案 fi...
設計模式8 組合模式
組合模式首先想到的就是樹形結構,比如我們常用的檔案結構,請看windows的檔案結構 無論是檔案或者是資料夾,常用操作都是一致的,比如 複製 貼上 剪下 刪除 所佔空間大小。我們並沒有刻意的去分他是資料夾還是檔案。我們可以把資料夾看成是組合物件,把每乙個檔案看成是單個物件。組合模式模糊了這兩個概念,...
《設計模式12 組合模式
組合模式其實是乙個很形象的模式。它也被稱為部分整體模式。組合模式的結構就如同樹狀圖一樣。而樹就是枝幹 葉子的組合,組合模式可以形象的這麼理解。其實資料夾是乙個很好的組合模式的體現。乙個資料夾 樹根root 下可能有多個資料夾 枝幹trunk 可能是單個的檔案 樹葉leaf 而枝幹是可以繼續向下延伸的...