《設計模式之禪》——策略模式

        定義:Define a family of algorithms, encapsulate each one, and make them interchangeable.(定義一組算法,將每個算法都封裝起來,並且使它們之間可以互換。)

        策略模式的通用類圖如圖所示。



      策略模式使用的就是面向對象的繼承和多態機制,非常容易理解和掌握,我們再來看策略模式的三個角色。

  • Context角色:起承上啓下封裝作用,屏蔽高層模塊對策略、算法的直接訪問,封裝可能存在的變化。
  • Strategy抽象策略角色:策略、算法家族的抽象,通常爲接口,定義每個策略或算法必須具有的方法和屬性。
  • ConcreteStrategy具體策略角色:實現抽象策略中的操作,該類含有具體的算法。


1.策略模式的應用


1.1策略模式的優點

  • 算法可以自由切換。
  • 避免使用多重條件判斷。
  • 擴展性良好。


1.2策略模式的缺點

  • 策略類數量增多:每一個策略都是一個類,複用的可能性很小,類數量增多。
  • 所有的策略類都需要對外暴露。上層模塊必須知道有哪些策略,然後才能決定使用哪一種策略,這與迪米特法則是相違背的,我只是想使用一個策略,我憑什麼就要了解這個策略呢?那要你的封裝類還有什麼意義?這是原裝策略模式的一個缺點,幸運的是,我們可以使用其他模式來修正這個缺陷,如果工廠方法模式、代理模式或享元模式。


1.3策略模式的使用場景

  • 多個類只有在算法或行爲上稍有不同的場景。
  • 算法需要自由切換的場景。
  • 需要屏蔽算法規則的場景。


1.4策略模式的注意事項


       如果系統中的一個策略家族的具體策略數量超過4個,則需要考慮使用混合模式,解決策略類膨脹和對外暴露的問題,否則日後的系統維護就會變成一個燙手山芋。


其它設計模式內容戳這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章