《c#26設計模式》之合成模式
1、合成模式簡介
合成模式是基於物件的模式,我們也可以理解成整體-部分模式,將物件組裝到樹結構,就可以用來描述整體和部分作用。
2、合成模式結構
從類圖中可以看出合成模式涉及
3個角色:
抽象構件角色
(component)
:這是乙個抽象角色,他給參加組合的物件規定乙個介面,這個角色給出共有的介面及其預設行為。
樹葉構件角色
(leaf)
:代表參加組合的樹葉物件。乙個樹葉沒有下級的子物件。定義出參加原始物件的行為。
樹枝構件角色
(composite)
:代表參加組合的有子物件的物件,並給出樹枝構件物件的行為。
3、合成模式
安全和透明式的合成模式
透明方式:就是在component裡面宣告所有的用來管理子物件的方法,包括add()、remove()以及getchild()方法,這樣做的好處是所有的構件類都有相同的介面。在客戶端看來,樹葉類物件與合成類物件的區別起碼在介面層次上消失了,客戶端可以同等的對待所有的物件。這就是透明形式的合成模式。
這個選擇的缺點是不夠安全的,因為樹葉類物件和合成類物件在本質上是有區別的,樹葉類物件不可能有一層的物件,因此add()、remove()以及getchild()方法沒有意義,但是在編譯時期不會出錯,而只會在執行時期才會出錯。
安全方式:是在composite類裡面宣告所有的用來管理子類物件的方法。這樣的做法是安全的做法,因為樹葉型別的物件根本就沒有管理子物件的方法。因此,如果客戶端對樹葉物件使用這些方法時會在編譯時期出錯。編譯不通過,就不會出現執行時出錯。
4、合成模式的應用:
首先建立抽象構建
建立樹葉構件源**如下:
建立樹枝構件源**如下:
客戶端源**如下:
顯示結果:
ruby設計模式之合成模式1 基本的合成模式
前幾天在 戲說設計模式 這篇文章中看到了一段關於組合模式的描述 composite mary今天過生日。我過生日,你要送我一件禮物。嗯,好吧,去商店,你自己挑。這件t恤挺漂亮,買,這條裙子好看,買,這個包也不錯,買。喂,買了三件了呀,我只答應送一件禮物的哦。什麼呀,t恤加裙子加包包,正好配成一套呀,...
ruby設計模式之合成模式1 基本的合成模式
前幾天在 戲說設計模式 這篇文章中看到了一段關於組合模式的描述 composite mary今天過生日。我過生日,你要送我一件禮物。嗯,好吧,去商店,你自己挑。這件t恤挺漂亮,買,這條裙子好看,買,這個包也不錯,買。喂,買了三件了呀,我只答應送一件禮物的哦。什麼呀,t恤加裙子加包包,正好配成一套呀,...
設計模式 策略模式 支付案例
設計模式 模板模式 jdbc案例 設計模式 介面卡模式 登入案例 設計模式 委派模式 登入案例 支付時,會有很多引數,很多邏輯,經常會遇到一種支付方式,上百行的 而且還需要很好的把控事務。如果多種支付方式,也會成倍的 維護起來相當難受。如下 示例 makeorder public resultdat...