設計模式系列——3.簡單工廠模式與策略模式總結
設計模式系列——3.簡單工廠模式與策略模式總結
一、簡單工廠模式
二、策略模式
三.總結
使用(設計模式系列——2.策略模式)中父類子類延申從程式碼開始對比。
服務端程式碼:
//使用策略模式
public class StrategyContext {
private Marketing marketing;
public StrategyContext(Marketing marketing) {
this.marketing = marketing;
}
public Double getResPrice(Double price){
return marketing.MarketingMethods(price);
}
}
//使用簡單工廠模式
public class PriceFactory {
public static Marketing getMarketing(String type){
switch (type){
case "無優惠":
Marketing originalPrice = new OriginalPrice();
return originalPrice;
case "打八折":
Marketing discount = new Discount(0.8);
return discount;
case "滿300減100":
Marketing fullReduction = new FullReduction(300,100);
return fullReduction;
default:
return null;
}
}
}
服務端:
策略模式和簡單工廠模式都有一個抽象父類或介面,以及多個不同子類實現,即都是通過多型來實現不同子類的選取然後執行相應方法。
策略模式獨有context物件,本質是將各個子類例項作為引數傳遞進去,使用父類接收,然後通過此父類物件呼叫子類方法實現不同演算法。
簡單工廠模式獨有factory類,此類包含多個if判斷,根據入參type得到一個子類物件。然後使用此物件來完成方法呼叫。
客戶端程式碼:
客戶端:
策略模式:
需要使用者知道Context物件和每個子類物件以及子類物件相關引數。
使用時,可以根據使用者需求動態的填入所以引數,完成具體演算法。
即在客戶端是根據使用者建立的子類物件來完成不同策略。
簡單工廠模式:
使用者只需要知道工廠類以及不同type即可在客戶端獲取父類物件,使用父類物件完成不同演算法。
即客戶端使用的是工廠類生產出來的子類例項來完成不同演算法。
總結:
工廠模式是建立型模式 關注物件建立,在客戶端傳入不同type通過工廠類建立出來的子類物件來完成具體演算法,同一個方法不同引數需要在工廠建立多個子類物件。即在客戶端通過工廠類得到父類物件呼叫子類方法。
策略模式是行為性模式 關注行為的封裝,在客戶端使用傳入的具體子類物件例項來完成具體演算法,同一個子類物件例項可以傳入不同的引數。即在客戶端建立context物件賦值不同子類物件,在context中完成子類物件的封裝,根據子類物件來實現不同的策略。
四.整合
簡單工廠模式,將演算法的選擇放在factory類中,即在服務端,客戶端只需要傳入type就能得到子類物件例項。 策略模式又將演算法的選擇權轉移到使用者手中,即由客戶端來建立不同的子類物件執行不同的策略。//使用策略模式 和 工廠模式結合。
public class ContextAndFactory {
private Marketing marketing;
public ContextAndFactory(String type) {
switch (type){
case "無優惠":
marketing = new OriginalPrice();
break;
case "打八折":
marketing = new Discount(0.8);
break;
case "滿300減100":
marketing = new FullReduction(300,100);
break;
}
}
public Double getResPrice(Double price){
return marketing.MarketingMethods(price);
}
}
使用:
優點:
此時我們將演算法的選擇權再次轉移到服務端。
對比:
簡單工廠模式,客戶端需要知道工廠類和父類物件兩個類。
策略模式,客戶端需要知道context類和每個策略子類。
結合後:客戶端只需要知道centext類即可,內部使用工廠類來選擇對應的演算法。即所有的if判斷扔放在context類中的工廠內。
相關文章
- 設計模式系列之一:簡單工廠模式設計模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 設計模式 - 簡單工廠模式設計模式
- 【設計模式】簡單工廠模式設計模式
- 設計模式——簡單工廠模式設計模式
- 設計模式-簡單工廠模式設計模式
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 設計模式之簡單工廠模式設計模式
- java設計模式-簡單工廠模式Java設計模式
- 設計模式(一)—— 簡單工廠模式設計模式
- 簡單工廠模式(設計模式02)設計模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- php設計模式總結-工廠模式PHP設計模式
- 用到的設計模式總結--單例模式+工廠方法模式+Builder模式設計模式單例UI
- 策略模式+單例模式+簡單工廠模式:推送服務模式單例
- 設計模式----簡單工廠設計模式
- 設計模式入門-簡單工廠模式設計模式
- golang設計模式之簡單工廠模式Golang設計模式
- 【Linux】設計模式-----簡單工廠模式Linux設計模式
- 大話設計模式:簡單工廠模式設計模式
- 【大話設計模式】——簡單工廠模式設計模式
- Java設計模式2:簡單工廠模式Java設計模式
- 簡單工廠模式—>工廠模式模式
- Swift設計模式:3.抽象工廠方法模式Swift設計模式抽象
- Java設計模式(一) 簡單工廠模式不簡單Java設計模式
- 設計模式系列·抽象工廠模式設計模式抽象
- 設計模式 --並不簡單的工廠模式設計模式
- Yii2設計模式——簡單工廠模式設計模式
- Java常用設計模式之簡單工廠模式Java設計模式
- 工廠模式之簡單工廠模式模式
- 極簡設計模式-工廠模式設計模式
- 23種設計模式(一)---簡單工廠設計模式設計模式
- 設計模式(一):簡單工廠設計模式
- iOS設計模式 - 簡單工廠iOS設計模式
- 簡單工廠模式、工廠模式、抽象工廠模式比較模式抽象
- 設計模式系列之「抽象工廠模式」設計模式抽象
- 設計模式系列之「工廠方法模式」設計模式
- 簡單工廠模式和抽象工廠模式模式抽象