不同咖啡加調料,用繼承,不靈活,修改和新增方法都不方便。還有比如要雙份mocha
問題擴充套件開發,修改關閉 衝突?
事實證明,有一些聰明的oo技術允許系統擴充套件,即使我們不能更改底層**。想想觀察者模式(第二章)。。。通過新增新的觀察者,我們可以隨時擴充套件主題,而無需向主題新增**。
2、每個部分都需要遵守嗎?
遵循ocp通常會引入新的抽象層次,增加**的複雜度。每個地方都是用會是一種浪費,也沒必要,還會導致**複雜且難以理解。
動態地將職責附加到物件身上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。
真題:寫出lowercaseinputstream 類。
intention意圖
動態地將職責附加到物件身上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。
開閉原則
akamotivation動機
有時我們想給單個物件新增職責,而不是給整個類新增職責。例如,圖形使用者介面工具箱應該允許您新增諸如邊框之類的屬性或滾動到任何使用者介面元件之類的行為。
增加責任的一種方法是繼承。從另乙個類繼承乙個邊框會在每個子類例項周圍放置乙個邊框。然而,這是不靈活的,因為邊界的選擇是靜態的。客戶機無法控制如何以及何時用邊框裝飾元件。
一種更靈活的方法是將元件封裝在另乙個新增邊框的物件中。封閉的物件稱為裝飾器。
設計模式之裝飾者模式 星巴克咖啡
package decorate headfirst設計模式 第三章節 裝飾者模式,裝飾者模式分為裝飾者與被裝飾者,它們必須共享同乙個超類,或者介面,因為只有這樣,才可以用 裝飾者替換被裝飾者 被裝飾者物件被裝飾者裝飾後變成了裝飾者物件,只有它們兩個物件可以相互替換才可使用裝飾者模式 本章節把咖啡飲...
裝飾器設計模式 咖啡
裝飾器設計模式 1.抽象元件 需要裝飾的抽象物件 介面或抽象物件 2.具體元件 需要裝飾的物件 3.抽象裝飾類 包含對抽象元件的引用以及裝飾者共有的方法 4.具體裝飾類 被裝飾的物件 author administrator public class decoratetest02 抽象元件 inte...
C 設計模式之4 裝飾者模式
背景是有一家星巴茲咖啡店,由於客源充足,所以決定重新設計他們的收費系統,以前的收費系統中只定義了乙個表示飲料的beverage的基類,它裡面定義了乙個cost的方法用來計算飲料的花費,但是對於星巴茲來說他們的飲料的種類實在太多了,不能就每一種飲料就建立乙個子類,型別 所以要進行一番設計,來改變目前這...