1. 程式人生 > 其它 >Java 裝飾者模式 —— { }

Java 裝飾者模式 —— { }

技術標籤:Java介面java設計模式抽象類

被裝飾者介面
//被裝飾者的介面
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()+"元");
	}

}
執行結果

在這裡插入圖片描述