2.3 装饰器模式
装饰器的本质是包装一个已有对象,并增强它的行为。
public abstract class Beverage {
public abstract double cost();
}
public abstract class ToppingDecorator extends Beverage {
public abstract double cost();
}
public class FruitTea extends Beverage {
@Override
public double cost() {
return 5.6;
}
}
public class Pudding extends ToppingDecorator {
private static final int COST = 5;
private final Beverage beverage;
public Pudding(Beverage beverage) {
this.beverage = beverage;
}
@Override
public double cost() {
return COST + beverage.cost();
}
}
public class Boba extends ToppingDecorator {
private static final int COST = 7;
private final Beverage beverage;
public Boba(Beverage beverage) {
this.beverage = beverage;
}
@Override
public double cost() {
return COST + beverage.cost();
}
}
public class Main {
public static void main(String[] args) {
Beverage milkTea = new MilkTea();
milkTea = new Boba(milkTea);
milkTea = new Boba(milkTea);
milkTea = new Pudding(milkTea);
System.out.println("Total cost: " + milkTea.cost());
}
}
