23種設計模式之裝飾者模式

2021-08-18 05:04:18 字數 1081 閱讀 7769

今天我來向大家講解一下裝飾者模式,裝飾者模式的設計原則同樣也是對擴充套件開放,對修改關閉,那我們就有了乙個問題,如何做到對修改關閉,對擴充套件開放呢?

我們都知道,裝飾者模式的定義是動態地將責任附加到物件中,其實裝飾者模式也可以說是動態巢狀的乙個過程。就比如舉例來說,假如我現在到乙個商店中買了一杯牛奶咖啡,這裡我們用到的裝飾者模式的地方就是,我的牛奶裝飾了咖啡,也可以說咖啡裝飾了牛奶,因為裝飾者模式是可以相互巢狀的。當然,當我的牛奶裝飾咖啡的時候,我需要有乙個判斷,因為我要付錢給老闆,我的牛奶和咖啡是分開算錢的,那我就需要乙個抽象父類來使得我的牛奶類和咖啡類來繼承,其中貫穿整個**的cost()方法來計算牛奶和咖啡的錢。

下面是裝飾者模式的乙個類圖,相信看了下面的類圖你會有一定了解,這個裡面的condientdecorator這個抽象類可以不寫,也不會影響整個模式。看到了這個模式之後,相信我們可以自己寫出來,下面是**展示。

首先,我們現需要寫乙個抽象基類beverage。

package food;

public abstract class beverage

public abstract double cost();

}接下來,我們需要我們的子類houseblend繼承抽象基類beverage。

package food;

public class houseblend extends beverage

public double cost()

然後我們還需要定義乙個抽象子類condimentdecorator繼承抽象基類beverage。當然,這一步可以不要。

package food;

public abstract class condimentdecorator extends beverage

public string getdescription()

public double cost()

}最後一步,也就是main函式了。

package food;

public class food

}

23種設計模式 裝飾者設計模式

23種設計模式之一,英文叫decorator pattern,又叫包裝模式。裝飾模式是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。裝飾物件和真實物件有相同的介面。裝飾物件包含乙個真實物件的引用。裝飾物件接受所有來自客戶端的請求。它把這些請求 給真實的物件 裝飾物件可以在 這些...

23種設計模式之裝飾模式

職責 動態的為乙個物件增加乙個新的功能 裝飾模式是乙個用於代替繼承的技術,無須通過繼承增加子類就能擴充套件物件的新功能,使用物件的關聯關係代替繼承關係,更加靈活,同時避免型別體系的快速膨脹。component抽象控制項元件 concretecomponent具體構件角色 真實物件 decorator...

23種設計模式之裝飾模式

定義 動態的給乙個物件新增一些額外的職責.就增加功能來說,裝飾模式相比生成子類更為靈活.通俗的說,就是對乙個類或方法進行包裝 裝飾模式的通用類圖 類圖中的四個角色說明如下 component 抽象構件 component是乙個介面或抽象類,就是定義我們最核心的角色,也就是最原始的物件.在裝飾模式中,...