Skip to main content

Strategy Pattern

定義一系列演算法,將每個演算法都封裝起來,並且使它們之間可以相互替換。策略模式使演算法可以獨立於使用它的用戶而變化。

核心思維是:對演算法、規則進行封裝,使得替換演算法和新增演算法更加靈活

設計要點

  1. 上下文環境(Context):起著承上啟下的封裝作用,遮罩上層應用對策略(演算法)的直接存取,封裝可能存在的變化。
  2. 策略的抽象(Strategy):策略(演算法)的抽象類別,定義統一的介面,規定每個子類別必須實現的方法
  3. 具備的策略:策略的具體實現者,可以有多個不同的(演算法或規則)實現。

優點

  1. 演算法(規則)可自由切換。
  2. 避免使用多重條件判斷。
  3. 方便拓展和增加新的演算法(規則)。

缺點

  1. 所有的策略類別都需要對外暴露。

使用情境

  1. 如果一個系統裡面有許多類別,它們之間的區別僅在於有不同的行為,那麼可以使用策略模式動態地讓一個物件在許多行為中選擇一種。
  2. 一個系統需要動態地在幾種演算法中選擇一種。
  3. 設計程式介面時希望部分內部實現由呼叫方自己實現。
note

來源: Python 設計模式 - 羅偉富