動態的將責任附加到物件上。想要擴充套件功能,裝飾者提供有別於繼承的另一種選擇。
注:設計原則,類應該對擴充套件開放,對修改關閉。這樣做的目的是由於,這樣類易於擴充套件,在不修改原有**的情況下,可以搭配新的行為,這樣的設計具有彈性可以應對改變,便於擴充套件
/**
* 裝飾者模式
* * 飲料抽象類,所有的beverage都要繼承超類
* @author utopia
* @date 20200823
*/public abstract class beverage
/*** **
* @param
* @return
*/public abstract double cost();
}public class espresso extends beverage
@override
public double cost()
}public class houseblend extends beverage
@override
public double cost()
}
public abstract class condimentdecorator extends beverage
public class mocha extends condimentdecorator
@override
public string getdescription()
@override
public double cost()
}public class soy extends condimentdecorator
@override
public string getdescription()
@override
public double cost()
}
/**
* 裝飾者模式
* * 飲料抽象類,所有的beverage都要繼承超類
* @author utopia
* @date 20200823
*/public class orderbeverage
}output
espresso--1.0
espressomocha--1.1
espressosoy--2.3
**倉庫: Head First 裝飾者模式
1.舉乙個簡單的例子 一種飲料黑咖啡,不新增為原味咖啡,新增調料摩卡為摩卡咖啡,新增牛奶味牛奶咖啡,新增巧克力為巧克力咖啡。實現這個例子第乙個想法是基類黑咖啡,然後摩卡咖啡繼承自黑咖啡,牛奶咖啡 巧克力咖啡同理。這樣的實現看來還不錯,也使用了物件導向。那麼,現在又有了新的需求 1 新增兩種及以上的調...
HeadFirst設計模式 裝飾者
裝飾者模式動態地將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。這句話摘自書中,給人讀得很生硬難懂。通俗地來說,裝飾者和被裝飾者有相同的父類,裝飾者的行為組裝著被裝飾者的行為。author lollipop since 2019 11 26 public abstract...
03裝飾者模式
動態地將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。public abstract class beverage 必須在子類實現 public abstract double cost public abstract class condimentdecorator e...