裝飾者模式動態(tài)地將責(zé)任附加到對象上薄榛。若要擴展功能,
裝飾者提供了比繼承更有彈性的替代方案皇钞。
實例解析:
星巴茲(Starbuzz)是以擴張速度最快而聞名的咖啡連鎖店瓤帚。如果你在街角看到它的店描姚,在對面街上肯定還會看到另一家。因為擴張速度實在太快了戈次,他們準(zhǔn)備更新訂單系統(tǒng)轩勘,以合乎他們的飲料供應(yīng)要求。
他們原先的類設(shè)計是這樣的……
購買咖啡時怯邪,也可以要求在其中加入各種調(diào)料绊寻,例如:蒸奶(Steamed Milk)、豆?jié){(Soy)、
摩卡(Mocha澄步,也就是巧克力風(fēng)味)或覆蓋奶泡冰蘑。星巴茲會根據(jù)所加入的調(diào)料收取不同的費
用。所以訂單系統(tǒng)必須考慮到這些調(diào)料部分村缸。
這是他們的第一個嘗試……
下面為裝飾者模式設(shè)計:
主函數(shù)代碼:
//裝飾者模式
public class main {
public static void main(String args[]) {
Beverage beverage = new Espresso();
System.out.println(beverage.getDescription()
+ " $" + beverage.cost());
Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
//beverage2 = new Mocha(beverage2);
// beverage2 = new Whip(beverage2);
System.out.println(beverage2.getDescription()
+ " $" + (beverage2.cost() + 0.2D));
Beverage beverage3 = new HouseBlend();
beverage3 = new Soy(beverage3);
beverage3 = new Mocha(beverage3);
beverage3 = new Whip(beverage3);
System.out.println(beverage3.getDescription()
+ " $" + beverage3.cost()); }}
設(shè)計原則
- 類應(yīng)該對擴展開放祠肥,對修改關(guān)閉。