Java 裝飾者模式 —— { }
阿新 • • 發佈:2021-01-25
被裝飾者介面
//被裝飾者的介面
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) {
// OutputStream out = new FileOutputStream("xxx");
// BufferedOutputStream bos = new BufferedOutputStream(out);
// PrintStream ps = new PrintStream(bos);
// ps.print(..);
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()+"元");
}
}
執行結果