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

2021-08-01 22:48:10 字數 1277 閱讀 9999

裝飾者結構圖:

(1)component:被裝飾者的抽象類或介面,定義了新增職責的方法

(2)concretecomponent:被裝飾者的具體實現類,如果只有乙個被裝飾者,concretecomponent和component可以合二為一

(3)decorator:裝飾者父類,繼承component被裝飾者,並且包含乙個被裝飾者的引用

(4)concretedecorator:具體裝飾物件,起到給component新增職責的功能

例子:(1)component,被裝飾者的介面,food介面

/**

* componet角色,被裝飾者food

*/public inte***ce food

(2)concretecomponent,具體的被裝飾者,hotpot火鍋類

/**

* food食物的具體實現類hotpot,被裝飾者

*/public class hotpot implements food

}

(3)decorator,裝飾者的父類,ingredients食材類,需要繼承food,並且包含乙個對food的引用

/**

* 裝飾者,具體食材的父類,繼承food

*/public class ingredients implements food

}public void setfood(food food)

}

(4)concretedecorator,具體的裝飾者,beef牛肉類

/**

* 具體裝飾者,牛肉類

*/public class beef extends ingredients

}

羊肉類

/**

* 具體裝飾者,羊肉類

*/public class mutton extends ingredients

}

(5)測試

public class test 

}

輸出:

放火鍋底料...

加牛肉...

加羊肉...

參考:(1)大話設計模式

(2)

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

星巴克咖啡館想要乙份選單系統,要求能夠計算不同種類咖啡加上不同調料 牛奶 豆漿 摩卡 奶泡。的 tom做了如下實現 每個咖啡都要繼承這個飲料類,然後對是否有各種調料進行配置,然後實現cost 方法。這樣基本解決了這個問題,但是如果現在又增加了幾種飲料,是不是需要更改現在的 呢?如何才能不對以前 做修...

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

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

設計模式 裝飾者模式

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