C 設計模式 合成模式 案例分析

2021-05-25 07:33:23 字數 1015 閱讀 4502

《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...