🎯 什麼情境該想到我

當你「同一件事有好幾種可以互換的做法,想在執行期挑一種來用、之後也能替換」的時候(例如不同的排序法、計費規則、壓縮/加密演算法、驗證策略),或想用組合來消掉「該用哪一種」的一長串條件分支。

⚙️ 怎麼用(步驟 / 公式)

意圖:定義一系列演算法,把每一個都封裝起來,並使它們可以互相替換。策略模式讓演算法可以獨立於使用它的客戶端而變化。

主要參與者 / 結構:

  • Strategy(策略介面):宣告所有具體策略共同的演算法介面。
  • ConcreteStrategy(具體策略):各自實作一種演算法。
  • Context(環境):持有一個 Strategy 參照,把工作委派給它;可在執行期抽換策略。

做法要點:

  1. 把「會變的那段演算法」抽成 Strategy 介面。
  2. 每一種做法實作成一個具體策略類別。
  3. Context 以組合方式持有某個策略,需要時呼叫它,不自己寫死用哪一種。
  4. 由外部(客戶端或設定)決定注入哪個策略,可執行期替換。

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 客戶端得知道有哪些策略、各自差在哪,才選得對——把選擇的責任推給了呼叫端。
  • 策略很少或幾乎不變時,直接寫死或用簡單條件即可,別為了模式增加物件。
  • 結構與狀態模式非常像,別搞混:策略是「主動挑一種演算法」,狀態是「隨狀態自動切換並會自我轉換」。

🔗 相關工具