1. 程式人生 > >Java 設計模式之裝飾者模式

Java 設計模式之裝飾者模式

本文為筆者學習《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 設計模式之單例模式