什么是策略模式具體的介紹
策略模式讓算法獨立于使用它的客戶而獨立變化。那么你對策略模式了解多少呢?以下是由學(xué)習啦小編整理關(guān)于什么是策略模式的內(nèi)容,希望大家喜歡!
什么是策略模式
策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨立于使用它的客戶而獨立變化。
策略模式的概念
(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)
Context(應(yīng)用場景):
1、需要使用ConcreteStrategy提供的算法。
2、 內(nèi)部維護一個Strategy的實例。
3、 負責動態(tài)設(shè)置運行時Strategy具體的實現(xiàn)算法。
4、負責跟Strategy之間的交互和數(shù)據(jù)傳遞。
Strategy(抽象策略類):
1、 定義了一個公共接口,各種不同的算法以不同的方式實現(xiàn)這個接口,Context使用這個接口調(diào)用不同的算法,一般使用接口或抽象類實現(xiàn)。
ConcreteStrategy(具體策略類):
2、 實現(xiàn)了Strategy定義的接口,提供具體的算法實現(xiàn)。
策略模式應(yīng)用場景
應(yīng)用場景:
1、 多個類只區(qū)別在表現(xiàn)行為不同,可以使用Strategy模式,在運行時動態(tài)選擇具體要執(zhí)行的行為。
2、 需要在不同情況下使用不同的策略(算法),或者策略還可能在未來用其它方式來實現(xiàn)。
3、 對客戶隱藏具體策略(算法)的實現(xiàn)細節(jié),彼此完全獨立。
策略模式優(yōu)缺點
優(yōu)點:
1、 策略模式提供了管理相關(guān)的算法族的辦法。策略類的等級結(jié)構(gòu)定義了一個算法或行為族。恰當使用繼承可以把公共的代碼轉(zhuǎn)移到父類里面,從而避免重復(fù)的代碼。
2、 策略模式提供了可以替換繼承關(guān)系的辦法。繼承可以處理多種算法或行為。如果不是用策略模式,那么使用算法或行為的環(huán)境類就可能會有一些子類,每一個子類提供一個不同的算法或行為。但是,這樣一來算法或行為的使用者就和算法或行為本身混在一起。決定使用哪一種算法或采取哪一種行為的邏輯就和算法或行為的邏輯混合在一起,從而不可能再獨立演化。繼承使得動態(tài)改變算法或行為變得不可能。
3、 使用策略模式可以避免使用多重條件轉(zhuǎn)移語句。多重轉(zhuǎn)移語句不易維護,它把采取哪一種算法或采取哪一種行為的邏輯與算法或行為的邏輯混合在一起,統(tǒng)統(tǒng)列在一個多重轉(zhuǎn)移語句里面,比使用繼承的辦法還要原始和落后。
缺點:
1、客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。這就意味著客戶端必須理解這些算法的區(qū)別,以便適時選擇恰當?shù)乃惴?。換言之,策略模式只適用于客戶端知道所有的算法或行為的情況。
2、 策略模式造成很多的策略類,每個具體策略類都會產(chǎn)生一個新類。有時候可以通過把依賴于環(huán)境的狀態(tài)保存到客戶端里面,而將策略類設(shè)計成可共享的,這樣策略類實例可以被不同客戶端使用。換言之,可以使用享元模式來減少對象的數(shù)量。
看過“策略模式是什么“的人還看了:
什么是策略模式具體的介紹
上一篇:黨參和太子參有什么區(qū)別
下一篇:什么是差量法的概念意思