二 策略模式

2021-09-18 05:01:58 字數 1808 閱讀 2388

在策略模式(strategy pattern)中,乙個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。

在策略模式中,我們建立表示各種策略的物件和乙個行為隨著策略物件改變而改變的 context 物件。策略物件改變 context 物件的執行演算法。

主要解決了:在有多種演算法相似的情況下,使用 if...else 所帶來的複雜和難以維護。

專案中總結:

下單過程中,下單中間步驟相同,但是中間有些過程和具體的支付方式相關,原本需要if....else 來判斷,現在可以策略模式來決定執行時應該用哪個策略(子類)來實現。

真實呼叫:

根據orderbizfactory.getorderbiz 去找到真正需要那種方式去支付

@override

@validationinputparameter

@walletaoplog("wt:下單支付")

public createorderresdto createorder(createorderrequestdto createorderrequestdto) ",createorderrequestdto);

createorderresdto createorderresdto = orderbizfactory.getorderbiz(createorderrequestdto.getsourcetype()).createorder(createorderrequestdto);

logger.info("下單支付 出參 createorderresdto:{}",createorderresdto);

return createorderresdto;

}finally

}

orderbizfacatory 

public class orderbizfactory 

public static abstractorderbiz getorderbiz(string sourcetype)

}

抽象類:

/**

* 建立訂單

** @param createorderrequestdto

* @return

*/public createorderresdto createorder(createorderrequestdto createorderrequestdto)

//3.根據**建立具體訂單

return createconcreteorder(createorderrequestdto);

}

子類一、

public class aorderbizimpl extends abstractorderbiz implements serializable 

createorderresdto createconcreteorder(createorderrequestdto createorderrequestdto)

}

子類二、

public class borderbizimpl extends abstractorderbiz implements serializable 

createorderresdto createconcreteorder(createorderrequestdto createorderrequestdto)

}

(二)策略模式

定義演算法家族,分別封裝起來,讓它們之間可以互相替換,讓演算法變化,不會影響到使用者 good 適合類中的成員以方法為主,演算法經常變動 簡化了單元測試 因為每個演算法都有自己的類,可以通過自己的介面單獨測試。策略模式和簡單工廠基本相同,但簡單工廠模式只能解決物件建立問題,對於經常變動的演算法應使用...

(二)策略模式

簡單工廠模式只是解決物件的建立問題,而且由於工廠本身包括了所有的收費方式,商場可能經常性的更改打折額度和返利額度,每次維護或者擴充套件收費方式都要改動這個工廠,以致 需要重新編譯部署,這不是一種好方法。而且為了建立不同的物件產品使用了switch case 或if else 的形式實現 這樣違背了開...

二 策略模式

策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦合 策略模式封裝了變化 在實踐中,我們發現可以用它來封裝幾乎任型別的規則,只要在分析過程中聽到需要在不同時間應用到不同的業...