Strategy Pattern:我是個有策略的人

2026年8月11日 下午2:02 · 閱讀 2 分鐘

系列文章: 常用設計模式整理 (第 3 篇)

生活例子:今天想怎麼去公司 / 學校

每天出門上班或上課,總是要挑選個合適的通勤方式。平時習慣走路或騎車,天氣糟糕時可能適合搭捷運,但睡過頭的話可能就得叫輛計程車。另外過去大學校園裡甚至還多了個「電動滑板車」的選項。各種策略皆有其適用情境,但無論何者,目的都是「抵達公司 / 教室」。

當發現一個目標有各種達成方式可選擇時,不妨就考慮試試 Strategy Pattern 吧。

系統需求:支援多種儲存平台的應用程式

  • 用戶可透過環境設定,選擇要從哪個平台上傳/下載檔案
  • 目前支援用戶本地的電腦硬碟,以及 Google Cloud
  • 未來應用程式希望繼續新增選項,吸引更多用戶

可以想想在應用設計模式前,自己會怎麼設計此系統


系統實作

實作:制定統一的存取介面
  • 存取平台都必須有上傳與下載兩個功能
實作:將支援的存取平台逐一寫成類別
  • 目前支援本地硬碟以及 Google 雲端儲存
  • 未來要加入新選擇,只要撰寫新的 class 就好(SOLID: Open-Closed Principle
實作:呼叫端只需要與介面溝通
實作:使用者自行決定要採取什麼策略

系統類別圖 Class Diagram

Strategy Pattern


設計模式簡要分析

  • Encapsulation:將演算法實作細節封裝至類別內
  • Abstraction:外部只要與介面溝通,與策略實作解耦
  • 方便擴充:未來若要加入新演算法,只要撰寫新的類別就好

此區塊為個人主觀的重點,也可以自己透過 OOP 四大支柱SOLID 設計原則 進行更深入地分析


參考資料

Strategy Design Pattern — GeeksforGeeks
SOLID Design Principles

本文採用 CC BY-NC 4.0 授權條款,轉載請註明出處。