裝飾者模式主要用來擴充套件功能的,不會改變原來物件的功能,只做擴充套件
版本一:
**如下:
public abstract class beefnoodle
public class basebeefnoodle extends beefnoodlepublic int getprice()
}
public class eggdecorator extends beefnoodle//增強的功能(基於真實物件上)
protected string getmsg()
//增強的功能(基於真實物件上)
protected int getprice()
}
private beefnoodle beefnoodle;測試**:public sausagedecorator(beefnoodle beefnoodle)
protected string getmsg()
protected int getprice()
public class mytest效果如下:}
版本二:
①根據策略模式獲取對應的策略物件
②計算**用具體的某乙個裝飾者物件去計算,因為會需要面的基本資訊,所以作為構造引數傳進來(代表這個物件是被增強的目標),此外各個裝飾者物件還擴充套件了自己的功能,比如 混合了雞蛋和香腸的類,方法就有三個引數(代表碗數量,雞蛋數量,烤腸數量)
類圖:
**如下:
public abstract class beefnoodle
public class basebeefnoodle extends beefnoodle//amount 牛肉麵數量
public int getprice(integer amount)
}
public class eggdecorator extends beefnoodleprotected string getmsg(integer eggs)
protected int getprice(integer eggs)
protected string getmsg(integer noodles,integer eggs)
protected int getprice(integer noodles ,integer eggs)
}
public class sausagedecorator extends beefnoodleprotected string getmsg(integer sausages)
protected int getprice(integer sausages)
protected string getmsg(integer noodles ,integer sausages)
protected int getprice(integer noodles ,integer sausages)
}
public class eggsandsausagedecorator extends beefnoodleprotected string getmsg(integer sausages)
protected int getprice(integer sausages)
protected string getmsg(integer noodles ,integer eggs,integer sausages)
protected int getprice(integer noodles,integer eggs,integer sausages)
// 策略模式,獲得不同的策略物件,具體的計算方式是在各個策略物件(裝飾者物件)實現的public class strategy
public static beefnoodle get(string noodlekey)
return noodlestrategy.get(noodlekey);
}}測試類:
public class mytest測試結果:}
只來一碗牛肉麵牛肉麵 * 1**為:5
只來兩碗牛肉麵牛肉麵 * 2**為:10
只來一碗牛肉麵加乙個雞蛋 牛肉麵 * 1加1個雞蛋**為:6
只來一碗牛肉麵加兩個雞蛋 牛肉麵 * 1加2個雞蛋**為:7
只來兩碗碗牛肉麵加兩個雞蛋 牛肉麵 * 2加2個雞蛋**為:12
只來一碗牛肉麵加乙個香腸 牛肉麵 * 1加1根香腸**為:6
只來一碗牛肉麵加兩個香腸 牛肉麵 * 2加2根香腸**為:7
只來兩碗碗牛肉麵共加兩個香腸 牛肉麵 * 2加2根香腸**為:12
只來一碗牛肉麵加乙個雞蛋乙個香腸 牛肉麵 * 1加1個雞蛋加1根香腸**為:8
只來一碗牛肉麵加兩個雞蛋兩個香腸 牛肉麵 * 2加2個雞蛋加2根香腸**為:17
只來兩碗碗牛肉麵各加兩個雞蛋兩個香腸 牛肉麵 * 4加4個雞蛋加4根香腸**為:22
裝飾者模式簡單理解
裝飾者模式簡單理解 1.定義 增強乙個類的功能,還可以讓裝飾者類之間互相裝飾 2.步驟 1 裝飾者類中需要維護乙個被裝飾者類的引用 2 讓裝飾者類有乙個共同的父類,或者父介面 eq 例項 裝飾者類與繼承的區別 繼承實現的增強類 優點 結構清晰,而且實現簡單 缺點 對於每乙個的需要增強的類都要建立具體...
裝飾者設計模式的簡單了解
本篇供個人學習使用,有問題歡迎討論 decorator pattern,能夠在不修改目標類也不使用繼承的情況下,動態地擴充套件乙個類的功能。它是通過建立乙個包裝物件,也就是裝飾者來達到增強目標類的目的的。裝飾者設計模式的實現有兩個要求 這兩個要求的目的是,在裝飾者類中的方法可以呼叫目標類的方法,以增...
裝飾者模式及其簡單例項
咖啡店裡咖啡中可以加不同的配料 摩卡 牛奶 糖 奶泡 不同的飲品加上不同的配料有不同的價錢,怎樣實現呢?可能你的第一印象會想到使用繼承,1.首先定義乙個咖啡基類 2.對於加糖的,加牛奶的,加摩卡的 加奶泡的,分別寫乙個子類繼承 3.對於加糖,又加奶的寫乙個類,對於對於加糖,又摩卡的寫乙個類,對於對於...