設計模式讀書筆記 6

2021-03-31 08:56:58 字數 898 閱讀 1531

decorator 模式

名稱:裝飾模式,包裝模式()

問題:

需要擴充套件乙個類的功能,或者給以各類增加附加職責;需要動態給乙個物件增加功能,這些功能可能動態撤銷;需要增加基本功能的排列組合產生非常大量的功能,從而使得繼承關係變得不現實。

例如:

乙個圖形介面工具箱允許你對一些使用者介面元素增加一些特性(例如邊框之類),使用繼承是可以的,但是,假設由很多特性需要增加,顯然我們無法增加那麼多特性。

解決:

將元件嵌入到另外乙個物件中,由這個物件新增邊框等特徵,且稱這個嵌入的物件為裝飾,這個裝飾同他所裝飾的元件介面一致,因此對於使用其的使用者來說是透明的。該裝飾物件將介面方法請求轉給元件,且有機會在**前後進行相關「裝飾」操作,且可以允許你遞迴巢狀裝飾以實現更多的特徵。

效果:

可動態、任意擴充元件信特徵,且可以任意遞迴呼叫增加。可以處理「撤銷」職責行為。客戶不會感覺到裝飾同元件的區別,也不會對裝飾產生任何依賴。 圖:

facede 模式

名稱:門面模式、外觀模式

問題:

假設乙個程式設計環境,含有多個子類,譬如

scanner

、programnode…...

等用於實現編譯環境。但是,對於使用者大多數任務來講,使用者並不關心編譯中得實現細節,編譯環境中的子類只會使得使用者覺得複雜。

解決:

增加乙個

***plier

類,定義並實現乙個編譯器統一的必須的介面,可以不掩藏實現細節的類而組合乙個可供使用者使用的系統介面。這個

***plirer

類實際就是編譯子系統的門面(注意,並未要求這些子類完全隱藏)。

效果:

可以對客戶遮蔽子系統,減少了客戶的負擔。實現了子系統同客戶件的鬆散耦合。但是,如果系統需要,並不限制子系統的請求。 圖:

設計模式讀書筆記 6

decorator 模式 名稱 裝飾模式,包裝模式 問題 需要擴充套件乙個類的功能,或者給以各類增加附加職責 需要動態給乙個物件增加功能,這些功能可能動態撤銷 需要增加基本功能的排列組合產生非常大量的功能,從而使得繼承關係變得不現實。例如 乙個圖形介面工具箱允許你對一些使用者介面元素增加一些特性 例...

設計模式讀書筆記

設計模式 就乙個類而言,應該僅有乙個引起它變化的原因。如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受意想不到的破壞。對於擴充套件是開放的,對於更改是封閉的。無論模組是多麼的 封閉 都會...

設計模式讀書筆記 外觀模式

講的是如何將乙個介面轉換成客戶所需要的另乙個接 口,它的目的在於 解決介面的不相容性問題。現在這裡有這樣乙個模式,它的目的在於如何簡化介面,它可以將多個 類的複雜的一切隱藏在背後,只顯露 出乙個乾淨美觀的外觀。晚上睡覺之前,你總是喜歡看電視,在你進入臥室的時候你需要完成以下幾個步驟 開啟電燈 開啟空...