優(yōu)點(diǎn):
1、 策略模式提供了管理相關(guān)的算法族的辦法拒啰。策略類的等級結(jié)構(gòu)定義了一個(gè)算法或行為族驯绎。恰當(dāng)使用繼承可以把公共的代碼轉(zhuǎn)移到父類里面,從而避免重復(fù)的代碼谋旦。
2剩失、 策略模式提供了可以替換繼承關(guān)系的辦法。繼承可以處理多種算法或行為册着。如果不是用策略模式拴孤,那么使用算法或行為的環(huán)境類就可能會有一些子類,每一個(gè)子類提供一個(gè)不同的算法或行為甲捏。但是演熟,這樣一來算法或行為的使用者就和算法或行為本身混在一起蒜绽。決定使用哪一種算法或采取哪一種行為的邏輯就和算法或行為的邏輯混合在一起诉字,從而不可能再獨(dú)立演化。繼承使得動態(tài)改變算法或行為變得不可能。
3免猾、 使用策略模式可以避免使用多重條件轉(zhuǎn)移語句。多重轉(zhuǎn)移語句不易維護(hù)囤热,它把采取哪一種算法或采取哪一種行為的邏輯與算法或行為的邏輯混合在一起猎提,統(tǒng)統(tǒng)列在一個(gè)多重轉(zhuǎn)移語句里面,比使用繼承的辦法還要原始和落后。
缺點(diǎn):
1锨苏、客戶端必須知道所有的策略類疙教,并自行決定使用哪一個(gè)策略類。這就意味著客戶端必須理解這些算法的區(qū)別伞租,以便適時(shí)選擇恰當(dāng)?shù)乃惴愓晡健Q言之,策略模式只適用于客戶端知道所有的算法或行為的情況葵诈。
2裸弦、 策略模式造成很多的策略類,每個(gè)具體策略類都會產(chǎn)生一個(gè)新類作喘。有時(shí)候可以通過把依賴于環(huán)境的狀態(tài)保存到客戶端里面理疙,而將策略類設(shè)計(jì)成可共享的,這樣策略類實(shí)例可以被不同客戶端使用泞坦。換言之窖贤,可以使用享元模式來減少對象的數(shù)量。
策略模式的抽象過程
簡單的說贰锁,策略模式就是要應(yīng)對規(guī)則變化和新規(guī)則加入對程序帶來的影響赃梧。
對于面向?qū)ο蟪绦蛟O(shè)計(jì)如何實(shí)現(xiàn)呢?通過接口可以避免直接調(diào)用規(guī)則豌熄,從而使得業(yè)務(wù)變化不會對規(guī)則產(chǎn)生影響槽奕。同時(shí),添加新規(guī)則也不會影響業(yè)務(wù)流程房轿。
這里舉個(gè)例子:
話說 劉備要到江東娶老婆了粤攒,走之前諸葛亮給趙云(伴郎) 三個(gè)錦囊妙計(jì),說是按天機(jī)拆開解決棘手問題囱持,最后搞得周瑜是賠了夫人又折兵夯接。
那咱們來看看這是個(gè)場景是什么樣子的。
先說這個(gè)場景種的要素:三個(gè)妙計(jì)纷妆,一個(gè)錦囊盔几,一個(gè)趙云。 妙計(jì)是諸葛亮給的掩幢,妙計(jì)放在錦囊里俗稱錦囊妙計(jì)逊拍。那個(gè)趙云就是一個(gè)干活的人,從錦囊中取出妙計(jì)际邻,執(zhí)行芯丧。
首先先寫一個(gè)妙計(jì)的接口
再來寫三個(gè)實(shí)現(xiàn)類:
第一妙計(jì)---> 找喬國老幫忙,使孫權(quán)不能殺劉備
第二妙計(jì)---> 求吳國太開發(fā)綠燈
第三妙計(jì)---> 孫夫人斷后世曾,阻擋追兵
三個(gè)妙計(jì)有了缨恒,現(xiàn)在就差一個(gè) 錦囊了
現(xiàn)在所有的準(zhǔn)備都好。就等趙云遇到了不能解決的問題,打開錦囊 解決問題了
運(yùn)行的結(jié)果:
這就是策略模式骗露,高內(nèi)聚低耦合岭佳。