Design Pattern: Behavioral Patterns - Strategy Pattern (策略模式)

Charlie Lee
Bucketing
Published in
2 min readMay 4, 2020

如何讓物件更靈活?如何設計可以簡單寫出單元測試的物件架構,Strategy Pattern是你的第一選擇

Photo by Felix Mittermeier on Unsplash

前言

策略模式,主要是讓相似的行為一起時做一個介面,並且可以抽換他們。在沒使用策略模式前,可能會用大量的if/else or swithc去撰寫程式邏輯,而透過策略模式可以將每個邏輯包裝好,並且透過介面方法執行。

類別圖

  • 將要執行的演算法/邏輯繼承一個策略的介面
  • 客戶端統一呼叫此策略介面的方法

這代表著隨時可以抽換不同的演算法

範例

英雄遊戲的技能施放,技能施放不管是怎樣的效果,他都是一個技能,非常適合用策略模式來撰寫。

  • 火焰攻擊和治癒都是實作Skill介面
  • 在SkillService中,再透過Map和String的比對拿出Skill實做並且使用

原始碼

結論

策略模式算是最常用的Design Pattern之一,許多開源項目有相同的意圖但是不同的邏輯時都是使用此模式(例如Socket相關的框架),策略模式主要的特徵有二 :

  • 可以替代if/else (switch),讓單元測試更好撰寫
  • 擴充方便 (需要增加演算法/邏輯只要繼承或實作繼續往下寫)

--

--