設計模式【03】——策略模式

參考《Java設計模式》、《設計模式之禪》、《headfirst設計模式》

目錄

一、簡介

二、使用策略模式

三、策略模式的優缺點

3.1 優點:

3.2 缺點:

四、使用場景及注意事項

4.1 使用場景

4.2 注意事項


一、簡介

策略模式是一個計劃或方式,給定一個輸入條件,獲得一個輸出。通常策略會提供一組可互換的方法。

  • 提供一個接口,將不同的可互換的策略抽離出來,封裝在各自獨立的類來實現接口

使用背景:

  • 程序存在多種策略時,策略的選擇和執行邏輯混合在一個方法時導致複雜度增加時,即可使用策略模式來簡化。

 

二、使用策略模式

需要以下步驟:

  1. 創建一個接口來定義策略操作
  2. 分別用不同的類來實現該策略接口
  3. 重構代碼,選擇使用正確的策略類

例子:廣告引擎之廣告推薦

三、策略模式的優缺點

3.1 優點:

  1. 策略可以自由切換
  2. 避免使用多重條件判斷:把判斷選擇策略的邏輯放到其他模塊,策略家族只提供訪問接口
  3. 擴展性良好

3.2 缺點:

  1. 策略類數量增多
  2. 所有的策略類都需要對外暴露
    1. 上層模塊必須知道有哪些策略,才能決定使用哪個,與迪米特法則相違背。只使用了一個策略,爲什麼要知道其他策略呢?
    2. 解決方法:結合其他模式來修正該缺陷:如工廠方法、代理模式或者享元模式
    3. 備註:迪米特原則:迪米特原則簡介

      迪米特法則(Law of Demeter, LoD)是1987年秋天由lan holland在美國東北大學一個叫做迪米特的項目設計提出的,它要求一個對象應該對其他對象有最少的瞭解,所以迪米特法則又叫做最少知識原則(Least Knowledge Principle, LKP)。

 

四、使用場景及注意事項

4.1 使用場景

  1. 多個類只在策略或者行爲上稍有不同
  2. 策略需要自由切換的場景
    1. 例如策略的選擇由使用者決定,或者策略始終在金華
  3. 需要屏蔽策略規則的場景

4.2 注意事項

        如果策略數量超過4個,則需要考慮混合模式。實際項目中,一般通過工廠方法模式來實現策略類的聲明

 

 

 

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