UML
代码
interface Coffee { String getDescription(); double cost();
}
class Espresso implements Coffee { @Override public String getDescription() { return "Espresso"; } @Override public double cost() { return 1.99; }
}
abstract class CoffeeDecorator implements Coffee { protected Coffee decoratedCoffee; public CoffeeDecorator(Coffee decoratedCoffee) { this.decoratedCoffee = decoratedCoffee; } @Override public String getDescription() { return decoratedCoffee.getDescription(); } @Override public double cost() { return decoratedCoffee.cost(); }
}
class Milk extends CoffeeDecorator { public Milk(Coffee decoratedCoffee) { super(decoratedCoffee); } @Override public String getDescription() { return decoratedCoffee.getDescription() + ", Milk"; } @Override public double cost() { return decoratedCoffee.cost() + 0.10; }
}
class Sugar extends CoffeeDecorator { public Sugar(Coffee decoratedCoffee) { super(decoratedCoffee); } @Override public String getDescription() { return decoratedCoffee.getDescription() + ", Sugar"; } @Override public double cost() { return decoratedCoffee.cost() + 0.10; }
}
public class CoffeeOrder { public static void main(String[] args) { Coffee espresso = new Espresso(); Coffee espressoWithMilk = new Milk(espresso); Coffee espressoWithMilkAndSugar = new Sugar(espressoWithMilk); System.out.println(espressoWithMilkAndSugar.getDescription() + " $" + espressoWithMilkAndSugar.cost()); }
}