Java設計模式之Decorator模式

2021-07-10 05:12:13 字數 1424 閱讀 6871

感覺比之前理解深了一點,紅字為新理解的內容,小白看過來

首先,不抽象,舉個例子。

我要去喝咖啡,咖啡店裡有兩種咖啡,一種摩卡的,一種藍山的,摩卡的50塊,藍山的100塊。

買了咖啡後還能放配料,有牛奶和伴侶。牛奶10塊一包,伴侶高階一 點,15塊一包。

現在店裡新上貨一種配料方糖,5塊錢一包,現在把上述的情景想象成已有**,那麼怎麼才能在不改變源**的情況下加入方糖這種新配料呢?

現在再附上類圖與**(類圖**轉至 「it職涯」博主)

總結

1.裝飾設計模式的好處在於擁有新裝飾(功能時)不用改變原有**,只需要新增新的裝飾效果(裝飾類)就能完成。

2.該模式中將drink的子類(除了decorator)的物件a作為實參傳入裝飾類的物件b的構造方法中,相當於對a新增了b裝飾。

3.裝飾效果可以疊加,比如我先加了牛奶,我還可以再加方糖,加方糖時只需要將前者已經加入了牛奶的咖啡作為實參傳遞到方糖裝飾類的物件的構造方法即可(結果第一行)。

4.裝飾設計必須得有乙個底層物件,所有的方法都是增強底層物件,以底層物件實現的內容為基礎再添油加醋的方法

fileinputstream是乙個節點流,它需要依賴於乙個固定的東西,比如硬碟上乙個檔案

bufferedinputstream就是乙個裝飾流,因為必須要先給它乙個底層物件,對該物件起到裝飾增強作用

5.最重要一點:是你還有你,一切拜託你

裝飾 drink類,本身還是drink類,而且內部還有乙個drink成員,該裝飾可以把想要重寫的drink的方法重寫,也可以直接就用drink自身的實現,好處在於不管你傳進來的是drink類下的哪一種子類,我都能給你修飾,而普通繼承實現就需要構造大量子類,過於繁瑣死板

注意

1..主函式中定義主體物件(此例中當做咖啡)與裝飾物件時都應新增final修飾符,(final關鍵字,父類中被final定義的成員變數子類中不可被改寫,但可通過super呼叫父類方法改寫,此處不對final做過多解釋),因為物件可能需要進行多種裝飾,而非僅僅一種。

java之設計模式

編寫 原則 開閉原則 對修改關閉 對擴充套件開發。如利於 二次開發 作用 1.重用 2.低耦合 模組與模組之間,類與類之間依賴程度要降低 3.高內聚 模組或者類內部依賴程度要高 4.易擴充 5.易維護 1.介面卡模式 橫向擴充套件,鏈條上有多個物件,每個物件持有下乙個物件的引用,這樣就會形成一條鏈,...

java設計模式之原型設計模式

原型設計模式 顧名思義,該模式的思想就是將乙個物件作為原型,對其進行複製 轉殖,產生乙個和原物件類似的新物件 設計思路 第一步 建立乙個類prototypemode,實現cloneable介面 第二步 在prototypemode中定義shallowclone方法 淺複製物件實現 和deepclon...

java設計模式之裝飾設計模式

裝飾設計模式 裝飾設計模式就是給乙個物件增加一些新的功能,而且是動態的。要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項 設計思路 第一步 定義介面action,在介面中提供乙個方法work 第二步 定義被裝飾類child,實現介面action 第三步 定義裝飾類adult,實現...