奶茶店有很多饮料可以抽象成Drink(名字,价格),然后每个饮料分别去实现这个抽象类,我们可以自己去加配料,比如布丁,蓝莓。建立一个新的抽象类去继承Drink并声明一个Drink对象,然后通过新的抽象类decorater的实现类去装饰Drink,为Drink添加新的描述。
代码实现:public abstract class Drink {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract double getPrince();
}
public class Coffee extends Drink{
Coffee(){
setName("咖啡");
}
@Override
public double getPrince() {
return 8;
}
}
public class Tea extends Drink{
Tea(){
setName("茶");
}
@Override
public double getPrince() {
return 5;
}
}
public abstract class Condiment extends Drink{
private String name;
}
public class Pudding extends Condiment{
Drink drink ;
public Pudding(Drink drink) {
this.drink = drink;
}
@Override
public double getPrince() {
return 1+drink.getPrince();
}
@Override
public String getName() {
return "布丁"+drink.getName();
}
}
public class BlueBerry extends Condiment{
Drink drink ;
public BlueBerry(Drink drink) {
this.drink = drink;
}
@Override
public String getName() {
return "蓝莓"+drink.getName();
}
@Override
public double getPrince() {
return 1.5+drink.getPrince();
}
}
public class client {
public static void main(String[] args) {
Drink s = new Coffee();
s= new BlueBerry(s);
s= new Pudding(s);
System.out.println("你点的是"+s.getName()+" 价格是"+s.getPrince());
}
}



