分類

行為型模式。

這個模式在解決什麼

策略模式要解決的是:同一類型的工作可能有多種做法,但我們不想把所有分支都硬寫在同一個類別裡。

它會把一組可替換的演算法或行為封裝起來,讓外部在需要時切換。

核心做法

做法通常是:

  • 先定義一個共同介面
  • 把不同做法各自實作成不同策略
  • 讓使用端持有某個策略,並把行為委派給它

因此,真正被替換的不是資料,而是「做事的方法」。

什麼時候適合用

很適合用在:

  • 同一個功能有多種實作方式
  • 你希望在執行期切換做法
  • 你想把大量條件分支拆開,避免單一類別越來越腫

例子

Floating Otter 的互動設計裡,場景中有許多可互動物件,玩家可能會對它們做三類操作:

  • 敲擊
  • 抓取
  • 餵食

不同物件面對同一種操作,反應又可能不同。像是魚被敲到可能暈眩,貝類被敲到則可能扣血。這時就可以把各種互動反應拆成策略,讓物件依照自身需求掛上對應做法,而不是把所有判斷都堆在一起。

類圖

這一篇先記住的重點

  • 策略模式把一組可替換的行為封裝成獨立物件
  • 它適合處理「同一件事有多種做法」的情境
  • 當條件分支越來越多時,拆成策略通常會更乾淨

參考書目

《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates