Java 設計模式之裝飾者模式
阿新 • • 發佈:2018-12-07
本文為筆者學習《Head First設計模式》的筆記,並加入筆者自己的理解和歸納總結
裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。
結構圖
雞尾酒Cocktail
一般以伏特加(Vodka
)、威士忌(Whisky
)等烈酒或是葡萄酒作為基酒,再配以檸檬汁(LemonJuice
)、石榴汁(PomegranateJuice
)、蒸餾水(DistilledWater
)、冰塊(IceBlock
)等其他輔助材料,加以攪拌或搖晃而成的一種飲料。
public interface Cocktail { String getDescription(); } public class Vodka implements Cocktail { @Override public String getDescription() { return "Vodka"; } } public class Whisky implements Cocktail { @Override public String getDescription() { return "Whisky"; } }
抽象裝飾類(CocktailDecorate
)
public abstract class CocktailDecorate implements Cocktail { Cocktail cocktail; public CocktailDecorate(Cocktail cocktail) { this.cocktail = cocktail; } @Override public String getDescription() { return cocktail.getDescription(); } }
具體裝飾類
public class LemonJuice extends CocktailDecorate { public LemonJuice(Cocktail decorate) { super(decorate); } @Override public String getDescription() { return super.getDescription() + ", Lemon Juice"; } } public class PomegranateJuice extends CocktailDecorate { public PomegranateJuice(Cocktail decorate) { super(decorate); } @Override public String getDescription() { return super.getDescription() + ", Pomegranate Juice"; } } public class DistilledWater extends CocktailDecorate { public DistilledWater(Cocktail decorate) { super(decorate); } @Override public String getDescription() { return super.getDescription() + ", Distilled Water"; } } public class IceBlock extends CocktailDecorate { public IceBlock(Cocktail decorate) { super(decorate); } @Override public String getDescription() { return super.getDescription() + ", Ice Block"; } }
執行
public static void main(String[] args) {
Cocktail cocktail = new Whisky();
cocktail = new LemonJuice(cocktail);
cocktail = new PomegranateJuice(cocktail);
cocktail = new DistilledWater(cocktail);
System.out.println(cocktail.getDescription());
cocktail = new Vodka();
cocktail = new IceBlock(cocktail);
System.out.println(cocktail.getDescription());
}
輸出
Whisky, Lemon Juice, Pomegranate Juice, Distilled Water
Vodka, Ice Block
相關文章
Java 設計模式之策略模式
Java 設計模式之觀察者模式
Java 設計模式之裝飾者模式
Java 設計模式之工廠方法模式
Java 設計模式之抽象工廠模式
Java 設計模式之單例模式