[design pattern] Strategy pattern:讓你的系統更靈活的秘訣

Strategy 模式:讓你的系統隨時變身的魔法

想像一下,如果你的系統能像變形金剛一樣,隨時根據需求變換不同的能力,那該有多酷?這就是 Strategy 模式要帶給我們的魔法!這個模式讓你的系統可以在運行時輕鬆切換不同的行為,就像給你的程式裝上了百寶箱。讓我們一起來探索這個神奇的設計模式吧!

1. Strategy 模式是什麼?

簡單來說,Strategy 模式就是:

  1. 把不同的招式分開練:將不同的算法或行為包裝成獨立的”武功秘笈”(策略類)。
  2. 隨時切換絕招:讓你的系統可以在需要的時候,立即換成不同的”武功”(策略)。
  3. 輕鬆學習新招式:想要添加新的行為?直接寫個新的”秘笈”就行,不用改動原有的代碼。

2. 為什麼要用 Strategy?

Strategy 模式在很多場景下都能派上用場:

  1. 支付系統:今天用信用卡,明天用 LINE Pay,後天用 Apple Pay,系統都不怕!
  2. 檔案壓縮:ZIP、RAR、7z,不同的壓縮方式隨你挑。
  3. 路線規劃:開車、騎車、走路,不同的出行方式一鍵切換。

3. Strategy 在實際系統中的應用

3.1 電商平台的促銷系統

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class PromotionContext {
constructor(strategy) {
this.strategy = strategy;
}

setStrategy(strategy) {
this.strategy = strategy;
}

calculateDiscount(amount) {
return this.strategy.applyDiscount(amount);
}
}

// 使用示例
const blackFridayStrategy = new BlackFridayStrategy();
const context = new PromotionContext(blackFridayStrategy);
console.log(context.calculateDiscount(1000)); // 輸出: 折扣後價格為 800 元

3.2 遊戲中的角色行為

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class CharacterContext {
constructor(strategy) {
this.strategy = strategy;
}

setStrategy(strategy) {
this.strategy = strategy;
}

move() {
this.strategy.move();
}
}

// 使用示例
const walkStrategy = new WalkStrategy();
const character = new CharacterContext(walkStrategy);
character.move(); // 輸出: 角色正在走路

const runStrategy = new RunStrategy();
character.setStrategy(runStrategy);
character.move(); // 輸出: 角色正在跑步

4. Strategy 模式的優缺點

好處

  1. 超級靈活:想換就換,系統變得特別有彈性。
  2. 擴展超Easy:要加新功能?小菜一碟!
  3. 程式碼更整潔:告別冗長的 if-else,代碼看起來更舒服。

小缺點

  1. 類別可能會變多:每個策略都是一個類,類的數量可能會增加。
  2. 選擇策略需要小心:使用時要知道每個策略適合什麼場景。

5. 你的系統哪裡可以用 Strategy?

  1. 訂單處理系統:根據不同的訂單類型(普通、加急、批發)使用不同的處理策略。
  2. 日誌記錄系統:根據不同的日誌級別(debug、info、warning、error)選擇不同的記錄策略。
  3. 數據分析系統:根據不同的數據類型和分析需求,選擇不同的分析算法。
  4. 圖像處理軟件:根據不同的濾鏡效果,應用不同的圖像處理策略。
  5. 客戶服務系統:根據客戶等級(VIP、普通會員、非會員)選擇不同的服務策略。

結論

Strategy 模式就像是給你的系統安裝了一個百變開關,讓它能夠靈活應對各種場景。無論是在電商平台、遊戲開發,還是企業應用中,Strategy 模式都能讓你的系統變得更加靈活有趣。下次遇到需要根據不同情況切換行為的場景,不妨試試這個魔法般的設計模式吧!


[design pattern] Strategy pattern:讓你的系統更靈活的秘訣
https://terryyaowork.github.io/designpattern/20240901/4214942545/
作者
Terry Yao
發布於
2024年9月1日
許可協議