設計模式(三)裝飾者模式

2022-07-31 20:03:23 字數 395 閱讀 1697

星巴克咖啡館想要乙份選單系統,要求能夠計算不同種類咖啡加上不同調料(牛奶、豆漿、摩卡、奶泡。。。)的**。tom做了如下實現:

每個咖啡都要繼承這個飲料類,然後對是否有各種調料進行配置,然後實現cost()方法。這樣基本解決了這個問題,但是如果現在又增加了幾種飲料,是不是需要更改現在的**呢?如何才能不對以前**做修改的基礎上實現不同飲料的變化呢?

裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。

現在我們就darkroast咖啡為物件(被裝飾者),而採用mocha和whip裝飾它。

注意:物件和裝飾者必須保證具有同一種超型別,用於實現相互包含,在任何需要原始物件(即被包裝物件的時候可以用已包裝過的物件代替它)。這樣,物件可以在任何時候被裝飾,可以動態、不限量的修改裝飾。

設計模式(三) 裝飾者模式

裝飾者結構圖 1 component 被裝飾者的抽象類或介面,定義了新增職責的方法 2 concretecomponent 被裝飾者的具體實現類,如果只有乙個被裝飾者,concretecomponent和component可以合二為一 3 decorator 裝飾者父類,繼承component被裝飾...

設計模式筆記(三) 裝飾者模式

裝飾者模式 decorator pattern 動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。簡單點說,裝飾者可以裝飾 也就是在原來功能的基礎上再擴充套件其功能 被裝飾者。乙個被裝飾者可以被多個裝飾者裝飾,或者被相同的裝飾者裝飾多次,是不是很靈活啊。而這就要求裝飾...

設計模式 裝飾者模式

public abstract class beverage public abstract double cost public abstract class condimentdecorator extends beverage public class darkroast extends be...