策略模式

策略模式

計算機術語
策略模式定義了一系列的算法,并将每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨立于使用它的客戶而獨立變化。恰當使用繼承可以把公共的代碼轉移到父類裡面,從而避免重複的代碼。多重轉移語句不易維護,它把采取哪一種算法或采取哪一種行為的邏輯與算法或行為的邏輯混合在一起,統統列在一個多重轉移語句裡面,比使用繼承的辦法還要原始和落後。
    中文名:策略模式 外文名:Pattern:Strategy 定義: 抽象策略角色:由一個接口或者抽象類實現 具體策略角色:包裝了相關的算法和行為 環境角色:持有一個策略類的引用

概念

(原文: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(應用場景):

1、需要使用ConcreteStrategy提供的算法。

2、内部維護一個Strategy的實例。

3、負責動态設置運行時Strategy具體的實現算法。

4、負責跟Strategy之間的交互和數據傳遞。

Strategy(抽象策略類):定義了一個公共接口,各種不同的算法以不同的方式實現這個接口,Context使用這個接口調用不同的算法,一般使用接口或抽象類實現。

ConcreteStrategy(具體策略類):實現了Strategy定義的接口,提供具體的算法實現。

戰略決定策略的方向與框架,而策略的好壞決定着戰略的成敗。

應用場景

1、多個類隻區别在表現行為不同,可以使用Strategy模式,在運行時動态選擇具體要執行的行為。(例如FlyBehavior和QuackBehavior)

2、需要在不同情況下使用不同的策略(算法),或者策略還可能在未來用其它方式來實現。(例如FlyBehavior和QuackBehavior的具體實現可任意變化或擴充)

3、對客戶(Duck)隐藏具體策略(算法)的實現細節,彼此完全獨立

優缺點

優點:

1、策略模式提供了管理相關的算法族的辦法。策略類的等級結構定義了一個算法或行為族。

2、策略模式提供了可以替換繼承關系的辦法。繼承可以處理多種算法或行為。如果不是用策略模式,那麼使用算法或行為的環境類就可能會有一些子類,每一個子類提供一個不同的算法或行為。

但是,這樣一來算法或行為的使用者就和算法或行為本身混在一起。決定使用哪一種算法或采取哪一種行為的邏輯就和算法或行為的邏輯混合在一起,從而不可能再獨立演化。繼承使得動态改變算法或行為變得不可能。

3、使用策略模式可以避免使用多重條件轉移語句。

缺點:

1、客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。這就意味着客戶端必須理解這些算法的區别,以便适時選擇恰當的算法類。換言之,策略模式隻适用于客戶端知道所有的算法或行為的情況。

2、策略模式造成很多的策略類,每個具體策略類都會産生一個新類。有時候可以通過把依賴于環境的狀态保存到客戶端裡面,而将策略類設計成可共享的,這樣策略類實例可以被不同客戶端使用。換言之,可以使用享元模式來減少對象的數量。

相關詞條

相關搜索

其它詞條