被装饰者接口
public interface Drink {
float cost();
String description();
}
具体的被装饰者
public class SoyaBeanMilk implements Drink{
@Override
public float cost() {
return 10f;
}
@Override
public String description() {
return "纯豆浆";
}
}
装饰者基类
public abstract class Decorator implements Drink{
private Drink drink;
public Decorator(Drink drink){
this.drink = drink;
}
@Override
public float cost() {
return drink.cost();
}
@Override
public String description() {
return drink.description();
}
}
具体的装饰者_01
public class SugarDecorator extends Decorator {
public SugarDecorator(Drink drink) {
super(drink);
}
@Override
public float cost() {
return super.cost()+1.0f;
}
@Override
public String description() {
return super.description()+"+糖";
}
}
具体的装饰者_02
public class BlackBeanDecorator extends Decorator {
public BlackBeanDecorator(Drink drink) {
super(drink);
}
@Override
public float cost() {
return super.cost()+2.0f;
}
@Override
public String description() {
return super.description()+"+黑豆";
}
}
具体的装饰者_03
public class EggDecorator extends Decorator {
public EggDecorator(Drink drink) {
super(drink);
}
@Override
public float cost() {
return super.cost()+3.0f;
}
@Override
public String description() {
return super.description()+"+鸡蛋";
}
}
测试类
public class Test {
public static void main(String[] args) {
Drink drink = new SoyaBeanMilk();
SugarDecorator sugar = new SugarDecorator(drink);
EggDecorator egg = new EggDecorator(sugar);
BlackBeanDecorator blackBean = new BlackBeanDecorator(egg);
System.out.println("你点的豆浆是:"+blackBean.description());
System.out.println("一共花了"+blackBean.cost()+"元");
}
}
运行结果