設(shè)計(jì)模式之策略模式

Intro#
策略模式(Strategy):它定義了算法家族,分別封裝起來(lái),讓它們之間可以互相替換,此模式讓算法的變化不會(huì)影響到使用算法的?Context
。
策略模式是一種定義一系列算法的方法,從概念上來(lái)看,所有這些算法完全的都是相同的工作,只是實(shí)現(xiàn)不同,它可以以相同的方式調(diào)用所有的算法,減少了各種算法類與使用類之間的耦合。
使用場(chǎng)景#
策略模式就是用來(lái)封裝算法的,但在實(shí)踐中也可以用它來(lái)封裝幾乎任何類型的規(guī)則,只要在分析過(guò)程中聽(tīng)到需要在不同時(shí)間應(yīng)用不同的業(yè)務(wù)規(guī)則,就可以考慮使用策略模式處理這種變化的可能性。
優(yōu)點(diǎn)#
減少了具體的算法和使用算法類之間的耦合
策略模式的 Strategy 類層為?
Context
?定義了一系列的可供重用的算法或行為,繼承有助于析取這些算法中的公共功能簡(jiǎn)化了單元測(cè)試,因?yàn)槊總€(gè)算法都有自己的類,可以通過(guò)自己的接口單獨(dú)測(cè)試
Sample

More
工廠模式是解耦對(duì)象的創(chuàng)建和使用,觀察者模式是解耦觀察者和被觀察者。策略模式跟兩者類似,也能起到解耦的作用,不過(guò),它解耦的是策略的定義、創(chuàng)建、使用這三部分。
策略模式用來(lái)解耦策略的定義、創(chuàng)建、使用。實(shí)際上,一個(gè)完整的策略模式就是由這三個(gè)部分組成的。
策略類的定義比較簡(jiǎn)單,包含一個(gè)策略接口和一組實(shí)現(xiàn)這個(gè)接口的策略類。
策略的創(chuàng)建由工廠類來(lái)完成,封裝策略創(chuàng)建的細(xì)節(jié)。
策略模式包含一組策略可選,客戶端代碼如何選擇使用哪個(gè)策略,有兩種確定方法:編譯時(shí)靜態(tài)確定和運(yùn)行時(shí)動(dòng)態(tài)確定。其中,“運(yùn)行時(shí)動(dòng)態(tài)確定”才是策略模式最典型的應(yīng)用場(chǎng)景
如果 if-else 分支判斷不復(fù)雜、代碼不多,這并沒(méi)有任何問(wèn)題,畢竟 if-else 分支判斷幾乎是所有編程語(yǔ)言都會(huì)提供的語(yǔ)法,存在即有理由。遵循 KISS 原則,怎么簡(jiǎn)單怎么來(lái),就是最好的設(shè)計(jì)。非得用策略模式,搞出 n 多類,反倒是一種過(guò)度設(shè)計(jì)。
策略的創(chuàng)建也可以結(jié)合依賴注入來(lái)創(chuàng)建或獲取,靈活使用。
出處:https://www.cnblogs.com/weihanli/p/strategy-pattern.html