設計模式學習筆記3:裝飾者模式

裝飾者模式動態地講責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。 ide

  • 裝飾者和被裝飾者有相同的超類
  • 你能夠用一個或多個裝飾者包裝一個對象
  • 既然裝飾者和被裝飾對象有相同的超類,因此在任何須要原始對象(被包裝的)的場合,能夠用裝飾過的對象代替它。
  • 裝飾者能夠在所委託被裝飾者的行爲以前與/或以後,加上本身的行爲,以達到特定的目的
  • 對象能夠在任什麼時候候被裝飾,因此能夠在運行時動態地,不限量地用你喜歡的裝飾者來裝飾對象

例如咖啡里加糖加奶加巧克力等等裝飾。 this

原始對象大可能是抽象類 對象

----------------------------------------- 繼承

飲料類 ip

public abstract class Beverage {
    String description= "Unknown Beverage";
    public String getDescription(){
        return this.description;
    }
    public abstract double cost();
} get

------------------------------------ io

調料類 class

public abstract class Condiment extends Beverage {
    public abstract String getDescription();
}
---------------------------------------------- 擴展

濃縮咖啡 sso

public class Espresso extends Beverage{
    public Espresso(){
        this.description="Espresso";
    }

    @Override
    public double cost() {
        return 1.99;
    }
}

-------------------------------------

混合咖啡
public class HouseBlend extends Beverage {
    public HouseBlend(){
        this.description="House Blend Coffee";
    }
    @Override
    public double cost() {
        return 0.89;
    }
}

----------------------------------

摩卡(巧克力)

public class Mocha extends Condiment {
    private Beverage beverage;
    public Mocha(Beverage beverage){
        this.beverage=beverage;
    }

    @Override
    public String getDescription() {
        return beverage.getDescription()+", Mocha";
    }

    @Override
    public double cost() {
        return 0.2+beverage.cost();
    }

}

-------------------------------------------

咖啡店

public class StarbuzzCoffee {
    public static void main(String[] args) {
       Beverage beverage=new Espresso();
       System.out.println(beverage.getDescription()+" $"+beverage.cost());
       Beverage beverage2=new HouseBlend();
       System.out.println(beverage2.getDescription()+" $"+beverage2.cost());
       beverage2=new Mocha(beverage2);
       System.out.println(beverage2.getDescription()+" $"+beverage2.cost());
    }
}

---------------------------------------------

結果:

Espresso $1.99 House Blend Coffee $0.89 House Blend Coffee, Mocha $1.09
相關文章
相關標籤/搜索