1、類圖ide
2、示例代碼測試
類圖:this
代碼:spa
一、飲料類code
/** * 飲料類 */ public abstract class Beverage { public String description = "Unknown Beverage"; public String getDescription(){ return description; } public abstract double cost(); }
二、具體飲料類對象
public class Espresso extends Beverage { public Espresso() { description = "Espresso"; } @Override public double cost() { return 1.99; } } public class HouseBlend extends Beverage { public HouseBlend() { description = "House Blend Coffee"; } @Override public double cost() { return 0.89; } }
三、調料 類,必須讓CondimentDecorator可以取代Beverage,因此將CondimentDecorator擴展自Beverageblog
/** * 調料類 */ public abstract class CondimentDecorator extends Beverage{ public abstract String getDescription(); }
四、具體調料類ip
public class Mocha extends CondimentDecorator { Beverage beverage; public Mocha(Beverage beverage) { this.beverage = beverage; } @Override public String getDescription() { return beverage.getDescription() + ", Mocha"; } @Override public double cost() { return 0.2 + beverage.cost(); } } public class Soy extends CondimentDecorator { Beverage beverage; public Soy(Beverage beverage) { this.beverage = beverage; } @Override public String getDescription() { return beverage.getDescription() + ", Soy"; } @Override public double cost() { return 0.3 + beverage.cost(); } } public class Whip extends CondimentDecorator { Beverage beverage; public Whip(Beverage beverage) { this.beverage = beverage; } @Override public String getDescription() { return beverage.getDescription() + ", Whip"; } @Override public double cost() { return 0.4 + beverage.cost(); } }
五、訂單測試類get
/** * 咖啡供應類 */ public class StarbuzzCoffee { public static void main(String[] args) { //訂一杯Espresso,不須要調料 Beverage beverage = new Espresso(); System.out.println(beverage.getDescription() + " $" + beverage.cost()); //來一杯調料爲豆漿、摩卡、奶泡的HouseBlend咖啡 Beverage beverage1 = new HouseBlend(); beverage1 = new Soy(beverage1); beverage1 = new Mocha(beverage1); beverage1 = new Whip(beverage1); System.out.println(beverage1.getDescription() + " $" + beverage1.cost()); } }
3、使用場景io
須要擴展一個類的功能,或給一個類增長附加功能。
須要動態地給一個對象增長功能,這些功能能夠再動態地撤銷。
須要爲一批的兄弟類進行改裝或加裝功能,固然是首選裝飾模式。