抽象商品类
/**
* 商品
*/
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