設計模式-策略模式-CSDN博客
- 系統中有很多類,它們之間的區別僅在于它們的行為。策略模式可以定義一系列的算法,并將它們一個個封裝起來,使它們可以相互替換。這樣,算法就可以獨立于使用它的客戶而變化。
- 需要使用算法的不同變體。當算法有多種實現方式,并且需要根據不同的情況選擇使用不同的算法時,可以使用策略模式。
- 算法使用客戶不應該知道的數據。策略模式可以避免暴露復雜的、與算法相關的數據結構,保證算法的安全性和封裝性。
- 一個類定義了多種行為,并且這些行為在類的操作中以多個條件語句的形式出現。使用策略模式可以避免使用大量的if-else語句,提高代碼的可讀性和可維護性。
具體來說,策略模式在以下場景中得到了廣泛的應用:
- 計費系統:對于不同用戶類型和消費金額,系統可以采用不同的計費方式。通過策略模式,可以定義不同的計費策略,并在運行時根據需要選擇合適的策略。
- 游戲開發中的角色技能系統:不同角色擁有不同的技能,游戲可以根據角色選擇相應的技能進行攻擊或防御。策略模式可以定義不同的技能策略,并在游戲中根據需要動態切換。
- 商城促銷活動:商城可以根據不同的促銷活動采取不同的優惠方式,如打折、滿減等。通過策略模式,可以定義不同的促銷策略,并在促銷活動中動態應用。
與簡單工廠模式的區別主要體現在以下幾個方面:
- 核心思想不同:簡單工廠模式的核心是創建對象,它將所有對象的創建邏輯集中在一個工廠類中。而策略模式的核心是定義一系列可互相替換的算法,它關注的是算法的使用和切換。
- 關注點不同:簡單工廠模式關注的是對象的創建過程,它將對象的創建與使用分離開來,簡化了對象的創建過程。而策略模式關注的是如何使用這些對象,特別是如何根據不同的條件選擇合適的算法或策略。
- 靈活性不同:簡單工廠模式在添加新的對象類型時需要修改工廠類的方法,這違反了設計模式中的開閉原則(OCP)。而策略模式則通過定義接口和策略類來實現算法的多樣性,可以在不修改已有代碼的情況下添加新的策略。
- 代碼結構不同:簡單工廠模式通常包含一個工廠類和一個或多個產品類,工廠類負責創建產品類的實例。而策略模式則包含策略接口、具體策略類、上下文環境和客戶端等部分,策略接口定義了一系列算法的公共接口,具體策略類實現了這些接口中的算法,上下文環境負責根據條件選擇合適的策略,并將其應用于客戶端。