設計模式 結構型模式 裝飾者模式

2021-10-02 12:38:58 字數 1953 閱讀 6056

方 案1- 解決星巴克咖啡訂單問題分析

1) drink 是乙個抽象類,表示飲料

2) des就是對咖啡的描述, 比如咖啡的名字

3) cost() 方法就是計算費用,drink 類中做成乙個抽象方法.

4) decaf 就是單品咖啡, 繼承drink, 並實現cost

5) espress && milk 就是單品咖啡+調料, 這個組合很多

6) 問題:這樣設計,會有很多類,當我們增加乙個單品咖啡,或者乙個新的調料,類的數量就會倍增,就會出現類**。

方案2- 解決星巴克咖啡訂 單( 好點)

前面分析到方案1因為 咖啡單品+ 調料組合會造成類的倍增,因此可以做改進,將調料內建到drink類,這樣就不會造成類數量過多。從而提高專案

的維護性

說明 : milk,soy,chocolate 可以設計為boolean,表示是否要新增相應的調料。

方案2- 的問題分析

1) 方案2可以控制類的數量,不至於造成很多的類

2) 在 增加或者刪除調料種類時,**的維護量很大

3) 考慮到使用者可以新增多份 調料時,可以將hasmilk 返回乙個對應int

4) 考慮使用 裝飾者 模式

裝飾者模式原理

1) 裝飾者模式就像 打包乙個快遞

 主體:比如:陶瓷、衣服 (component) // 被裝飾者

 包裝:比如:報紙填充、塑料泡沫、紙板、木板(decorator)

2) component

主體:比如類似前面的drink

3) concretecomponent和decorator concretecomponent:具體的主體,比如前面的各個單品咖啡decorator: 裝飾者,比如各調料.

4) 在如圖的component 與concretecomponent 之間,如果concretecomponent類很多,還可以設計乙個緩衝層,將共有的部分提取出來,抽象層乙個類。

說明1) milk包含了longblack

2) 乙份chocolate包含了(milk+longblack)

3) 乙份chocolate包含了(chocolate+milk+longblack)

4) 這樣不管是什麼形式的單品咖啡+調料組合,通過遞迴方式可以方便的組合和維護。

//具體的decorator, 這裡就是調味品

public class chocolate extends decorator

}public class coffee extends drink

}public class soy extends decorator

}public class shortblack extends coffee

}public class milk extends decorator

}public class longblack extends coffee

}public class espresso extends coffee

}public abstract class drink

public void setdes(string des)

public float getprice()

public void setprice(float price)

//計算費用的抽象方法

//子類來實現

public abstract float cost();

}public class decorator extends drink

@override

public float cost()

@override

public string getdes()

}public class decaf extends coffee

}public class coffeebar

}

結構型模式 裝飾者設計模式

裝飾模式指的是在不必改變原類檔案和繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件,比如處理流。應用場景 需要擴充套件乙個類的功能,或給乙個類新增附加職責。優點就是耦合性低,重用性高 高內聚,低耦合 按照一般的方法,要麼就是分別修改各自的read方法,...

結構型模式 裝飾者模式

動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator模式相比生成子類更為靈活。1.在不影響其他物件的情況下,以動態 透明的方式給單個物件新增職責。2.處理那些可以撤消的職責。3.當不能採用生成子類的方法進行擴充時。1.component 定義乙個物件介面,可以給這些物件動態地新增職...

結構型模式 裝飾者模式

總結解決乙個問題 裝飾者模式 program ade someproblem author cade franklin create 2019 12 28 28 19 public abstract class drink string getdesc abstract float cost 接下來...