策略設計模式

策略模式屬於對象的行爲模式。算法

  • 其用意是針對一組算法,將每個算法封裝到具備共同接口的獨立的類中,從而使得它們能夠相互替換。
  • 策略模式使得算法能夠在不影響到客戶端的狀況下發生變化。

  • 策略模式是對算法的包裝,是把使用算法的責任和算法自己分割開來,委派給不一樣的對象管理
  • 策略模式一般把一個系列的算法包裝到一系列的策略類裏面,做爲一個抽象策略類的子類
  • 用一句話來講,就是:「準備一組算法,並將每個算法封裝起來,使得它們能夠互換」

認識策略模式

策略模式的重心spa

  • 策略模式的重心不是如何實現算法,而是如何組織、調用這些算法,從而讓程序結構更靈活,具備更好的維護性和擴展性。

算法的平等性對象

  • 策略模式一個很大的特色就是各個策略算法的平等性。
  • 對於一系列具體的策略算法,你們的地位是徹底同樣的,正由於這個平等性,才能實現算法之間能夠相互替換。
  • 全部的策略算法在實現上也是相互獨立的,相互之間是沒有依賴的。
  • 能夠這樣描述這一系列策略算法:策略算法是相同行爲的不一樣實現。

運行時策略的惟一性blog

  • 運行期間,策略模式在每個時刻只能使用一個具體的策略實現對象,雖然能夠動態地在不一樣的策略實現中切換,可是同時只能使用一個。

公有的行爲繼承

  • 常常見到的是,全部的具體策略類都有一些公有的行爲。
  • 這時候,就應當把這些公有的行爲放到共同的抽象策略角色Strategy類裏面。
  • 固然這時候抽象策略角色必需要用Java抽象類實現,而不能使用接口。

策略模式的優勢

  • 策略模式提供了管理相關的算法族的辦法。策略類的等級結構定義了一個算法或行爲族。恰當使用繼承能夠把公共的代碼移到父類裏面,從而避免代碼重複。
  • 使用策略模式能夠避免使用多重條件(if-else)語句。多重條件語句不易維護,它把採起哪種算法或採起哪種行爲的邏輯與算法或行爲的邏輯混合在一塊兒,通通列在一個多重條件語句裏面,比使用繼承的辦法還要原始和落後。

策略模式的缺點

  • 客戶端必須知道全部的策略類,並自行決定使用哪個策略類。這就意味着客戶端必須理解這些算法的區別,以便適時選擇恰當的算法類。換言之,策略模式只適用於客戶端知道算法或行爲的狀況。
  • 於策略模式把每一個具體的策略實現都單獨封裝成爲類,若是備選的策略不少的話,那麼對象的數目就會很可觀。
相關文章
相關標籤/搜索