22、設計模式之裝飾者模式
阿新 • • 發佈:2018-12-18
抽象商品類
/**
* 商品
*/
public abstract class AbstractGoods {
public abstract String getName() ;
public abstract Double getPrice();
}
抽象裝飾者包裝類
/** * 抽象裝飾者包裝類 */ public abstract class AbstractGoodsDecorator extends AbstractGoods{ private AbstractGoods abstractGoods; public AbstractGoodsDecorator(AbstractGoods abstractGoods){ this.abstractGoods = abstractGoods; } @Override public String getName() { return this.abstractGoods.getName(); } @Override public Double getPrice() { return this.abstractGoods.getPrice(); } }
實體商品類
/**
* 實體商品類
*/
public class Goods extends AbstractGoods {
@Override
public String getName() {
return "商品清單=";
}
@Override
public Double getPrice() {
return 0.0;
}
}
實體商品:蛋糕裝飾者類
/** * 蛋糕 */ public class TakeDecorator extends AbstractGoodsDecorator { public TakeDecorator(AbstractGoods abstractGoods) { super(abstractGoods); } @Override public String getName() { return super.getName() + " 蛋糕"; } @Override public Double getPrice() { return super.getPrice() + 4.98; } }
實體商品:水裝飾者類
/** * 水 */ public class WaterDecorator extends AbstractGoodsDecorator { public WaterDecorator(AbstractGoods abstractGoods) { super(abstractGoods); } @Override public String getName() { return super.getName() + " 水"; } @Override public Double getPrice() { return super.getPrice() + 2.5; } }
呼叫
public class Main {
public static void main(String[] args) {
AbstractGoods abstractGoods;
// 商品清單
abstractGoods = new Goods();
// 蛋糕
abstractGoods = new TakeDecorator(abstractGoods);
// 水
abstractGoods = new WaterDecorator(abstractGoods);
// 水
abstractGoods = new WaterDecorator(abstractGoods);
System.out.println(abstractGoods.getName() + " 總價:" + abstractGoods.getPrice());
}
}
執行結果
商品清單= 蛋糕 水 水 總價:9.98