為了學習設計模式時便於理解,我將用基於農夫和他的村子與森林為背景環境,講乙個故事時,闡述乙個設計模式,今天作為第二個,乙個很有意思的設計模式–裝飾者模式。
這是乙個美麗而又安靜祥和的村莊,村里的人日出而作日落而息,村子裡,農夫靠伐木和打獵為生,女人呢,額。。。。總之,大家過著幸福美滿的生活。
夕陽西下,在外狩獵了一天的農夫王五準備回家了。到村門口的時候發現妻子正在家門口深情的等待著自己的歸來。妻子接過王五打回來的獵物,看到有野雞,於是妻子說,今晚吃烤雞吧。王五聽了也是開心點頭說道,好啊,記得加鹽哦,對了,再加點胡椒更有味。妻子笑著說,好好好。王五接著又說,再加點蔥花啊,更香呢!
在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。
裝飾者和被裝飾者物件有相同的超類
可以用乙個或多個裝飾者包裝乙個物件
既然裝飾者和被裝飾者物件有相同的超型別,所以在任何需要原始物件(被包裝的)場合,可以用裝飾過的物件代替它
裝飾者可以在所委託被裝飾的行為之前或之後,加上自己的行為,已達到特定的目的。
物件可以在任何時候被裝飾,所以可以執行時動態的、不限量地用你喜歡的裝飾者來裝飾物件
食物—–>基類
烤雞—–>一種食物
佐料—–>一種食物
鹽——->一種佐料
胡椒—->一種佐料
蔥花—->一種佐料
intgetdeliciousscore();//子類需要實現的獲取美味評分
}
public
abstract
class
condiment
extends
food
//鹽
public
class
salt
extends
condiment
@override
public
intgetdeliciousscore()
@override
public string getdescription()
}
public
class
pepper
extends
condiment
@override
public
intgetdeliciousscore()
@override
public string getdescription()
}
public
class
choppedgreenonion
extends
condiment
@override
public
intgetdeliciousscore()
@override
public string getdescription()
}
public
class
roastchicken
extends
food
@override
public
intgetdeliciousscore()
}
public
class
main
}
王五一家吃了一餐美味的晚餐,然後洗洗睡了。。。。 設計模式 裝飾者模式
public abstract class beverage public abstract double cost public abstract class condimentdecorator extends beverage public class darkroast extends be...
設計模式 裝飾者模式
沒什麼特別的,之前看懂了,這次自己再複述一下。畢竟把別人講懂了才是真的懂了。主要參考了head first 設計模式。例子講述的是在為星巴克咖啡的製作訂單的情況,比如客人點了飲料,那麼系統會自動算出 不知道是我沒有體會到,還是這個例子不太合適,算出 那麼簡單的事還需要用到類?不過不影響我們思考裝飾者...
設計模式 裝飾者模式
好幾天沒出部落格了,在學習android的一些新控制項的時候,用到了乙個模式,叫裝飾者模式,所以在此講講這個模式。模式,包含以下四個角色 1 抽象構件 component 角色 給出乙個抽象介面,以規範準備接收附加責任的物件。2 具體構件 concretecomponent 角色 定義乙個將要接收附...