裝飾者模式——動態地將責任附加到對象上。想要擴展什麼功能,裝飾者提供有別於繼承的另一種選擇。
package pattern;
public class Decorator {
public static void main(String[] args) {
Beverage t = new Coffee();
Beverage q = new Water(t);
q = new Milk(q);
q = new Milk(q);
System.out.println(q.cost());
}
}
abstract class Beverage{
public abstract int cost();
}
abstract class CondimentDecorator extends Beverage{
public abstract int cost();
}
class Sugar extends CondimentDecorator{
private int money = 5;
protected Beverage beverage;
public Sugar(Beverage beverage){
this.beverage = beverage;
}
public int cost(){
return this.money + beverage.cost();
}
}
class Milk extends CondimentDecorator{
private int money = 10;
private Beverage beverage;
public Milk(Beverage beverage){
this.beverage = beverage;
}
public int cost(){
return this.money + beverage.cost();
}
}
class Water extends CondimentDecorator{
private int money = 1;
protected Beverage beverage;
public Water(Beverage beverage){
this.beverage = beverage;
}
public int cost(){
return this.money + beverage.cost();
}
}
class Coffee extends Beverage{
private int money = 100;
public int cost() {
return this.money;
}
}