abstract class Beverage { protected double cost = 0; protected String description = "drink"; public double getcost() { return cost; } public String getdescription() { return description; } } class Coffee extends Beverage { public Coffee() { description = "coffee"; cost = 1.2; } } abstract class CondimentDecorator extends Beverage { protected Beverage beverage; public double getcost() { return cost + beverage.getcost(); } public String getdescription() { return beverage.getdescription() + " with " + description; } } class SugarDecorator extends CondimentDecorator { public SugarDecorator(Beverage bev) { this.beverage = bev; description = "sugar"; cost = 0.10; } } class MilkDecorator extends CondimentDecorator { public MilkDecorator(Beverage bev) { this.beverage = bev; description = "milk"; cost = 0.2; } } public class DecoratorDriver { public static void main(String[] args) { Beverage bev1 = new Coffee(); System.out.println(bev1.getdescription() + " $" + bev1.getcost()); Beverage bev2 = new SugarDecorator(bev1); System.out.println(bev2.getdescription() + " $" + bev2.getcost()); Beverage bev3 = new MilkDecorator(bev1); System.out.println(bev3.getdescription() + " $" + bev3.getcost()); Beverage bev4 = new MilkDecorator(bev2); System.out.println(bev4.getdescription() + " $" + bev4.getcost()); } }