Strategy Pattern
定義一系列演算法,將每個演算法都封裝起來,並且使它們之間可以相互替換。策略模式使演算法可以獨立於使用它的用戶而變化。
核心思維是:對演算法、規則進行封裝,使得替換演算法和新增演算法更加靈活。
設計要點
- 上下文環境(Context):起著承上啟下的封裝作用,遮罩上層應用對策略(演算法)的直接存取,封裝可能存在的變化。
- 策略的抽象(Strategy):策略(演算法)的抽象類別,定義統一的介面,規定每個子類別必須實現的方法。
- 具備的策略:策略的具體實現者,可以有多個不同的(演算法或規則)實現。
優點
- 演算法(規則)可自由切換。
- 避免使用多重條件判斷。
- 方便拓展和增加新的演算法(規則)。
缺點
- 所有的策略類別都需要對外暴露。
使用情境
- 如果一個系統裡面有許多類別,它們之間的區別僅在於有不同的行為,那麼可以使用策略模式動態地讓一個物件在許多行為中選擇一種。
- 一個系統需要動態地在幾種演算法中選擇一種。
- 設計程式介面時希望部分內部實現由呼叫方自己實現。
note
來源: Python 設計模式 - 羅偉富