package test.decorate;
public class Operater {
public static void main(String[] args) {
Drink drink = new Coke();
Drink iceDrink = new Ice(new Sugar(drink));
System.out.println(iceDrink.make());
}
}
package test.decorate;
public class Sugar extends Stuff{
public Sugar(Drink _drink) {
super(_drink);
}
@Override
String stuffName() {
return "糖";
}
}
public class Ice extends Stuff {
public Ice(Drink _drink) {
super(_drink);
}
@Override
String stuffName() {
return "冰";
}
}
package test.decorate;
public abstract class Stuff implements Drink {
private Drink drink;
public Stuff(Drink _drink) {
this.drink = _drink;
}
public String make() {
System.out.println(stuffName());
System.out.println(drink.make());
System.out.println(drink.make()+",加" + stuffName());
return "";
}
abstract String stuffName();
}
package test.decorate;
public class Coke implements Drink {
public String make() {
return "一杯可乐";
}
}
package test.decorate;
public interface Drink {
public String make();
}
执行结果是这样的,希望大神指点一下