Strategy Pattern 核心意圖、UML 結構與演進動機完整解析
Abstract
Head First Design Patterns 與陳俊杉教授課程均以 Strategy 作為首個教學模式,適合初學者入門。
Intent
定義一族演算法,封裝每個演算法,使其可互換。演算法變化不影響使用演算法的客戶端。
UML 結構
圖 1:Strategy Pattern UML 類別圖
別名與比喻
GoF 稱 Policy,筆者偏好稱 Plugin:動態換演算法如同 Eclipse 換 Plugin。
演進動機
圖 2:初始 Grapher 僅能畫方形
需求變更:需支援三角形、圓形、未來橢圓、菱形...
若在 Grapher 不斷添加 drawTriangle()、drawCircle() 違反 OCP。
圖 3:抽出 IShape 介面,Triangle/Circle/Square 實作
架構優勢驗證
- 新增 Shape:Grapher、IShape、既有 Shape **皆無需修改** → Closed for Modification
- 新增 Shape:只需實作 IShape → Open for Extension
- .NET Framework、STL 大量使用 Strategy Pattern
本質總結
Strategy Pattern = 將會變動的成員函數用類別封裝,變成物件「掛」在原本類別上。