"這個季度用積極行銷策略,下季度改保守策略,年底看情況決定要不要用瘋狂促銷策略!"
週二上午的季度策略會議,老闆站在投影機前,手裡拿著遙控器,螢幕上顯示著密密麻麻的營收圖表。
「各位!」老闆清了清嗓子,「我們的行銷策略需要更有『彈性』!」
行銷經理小萍舉手問:「什麼意思?」
「意思是...」老闆開始在白板上畫圖,「市場好的時候,我們用『積極攻勢策略』:大量投廣告,促銷活動,擴大市占率!」
他又畫了另一個圈:「市場不好的時候,我們用『保守防守策略』:減少支出,專注既有客戶,穩住基本盤!」
然後又畫了第三個圈:「遇到特殊節日,我們用『瘋狂促銷策略』:賠本賺吆喝,衝高知名度!」
財務經理老趙困惑地問:「那我們要怎麼知道什麼時候用哪種策略?」
「看情況啊!」老闆眼神發亮,「我希望系統能『智能切換』!市場指標好就自動切換到積極模式,指標差就切換到保守模式,遇到節日就切換到促銷模式!」
工程師小劉抗議:「但是每種策略的邏輯完全不同啊...」
「那就做成『策略模組』!」老闆越說越興奮,「就像換汽車引擎一樣!今天裝省油引擎,明天換大馬力引擎,後天換電動引擎!但是開車的方法都一樣!」
產品經理阿凱試圖理解:「所以您希望...」
「我希望我們的系統是『策略變色龍』!」老闆總結,「根據環境自動變色,但本質還是同一隻蜥蜴!」
你突然恍然大悟,老闆其實是在描述 Strategy Pattern - 定義一系列算法,把它們封裝起來,並且使它們可以互相替換!
Strategy Pattern(策略模式)是行為型設計模式中的變色大師,它的核心思想是:定義一系列算法,把它們一個個封裝起來,並且使它們可以互相替換,此模式讓算法的變化獨立於使用算法的客戶端。
在我們的策略災難中,老闆的變色龍需求完美地展現了 Strategy Pattern 的本質:
Strategy Pattern 的核心組件:
適用情境:
讓我們實作一個「智能行銷策略系統」,展示 Strategy Pattern 的核心概念:
// 策略介面
interface Strategy {
execute(data: number): number;
}
// 具體策略:積極策略
class AggressiveStrategy implements Strategy {
execute(budget: number): number {
return budget * 1.5; // 增加50%預算
}
}
// 具體策略:保守策略
class ConservativeStrategy implements Strategy {
execute(budget: number): number {
return budget * 0.7; // 減少30%預算
}
}
// 具體策略:促銷策略
class PromotionStrategy implements Strategy {
execute(budget: number): number {
return budget * 2.0; // 增加100%預算
}
}
// 上下文類別
class Context {
private strategy: Strategy;
constructor(strategy: Strategy) {
this.strategy = strategy;
}
setStrategy(strategy: Strategy): void {
this.strategy = strategy;
}
executeStrategy(budget: number): number {
return this.strategy.execute(budget);
}
}
// 使用範例
const context = new Context(new ConservativeStrategy());
console.log("保守策略:", context.executeStrategy(1000)); // 700
context.setStrategy(new AggressiveStrategy());
console.log("積極策略:", context.executeStrategy(1000)); // 1500
context.setStrategy(new PromotionStrategy());
console.log("促銷策略:", context.executeStrategy(1000)); // 2000
Strategy 設計原則:
與老闆溝通策略:
技術實作要點:
架構決策建議:
明天我們將探討 Command Pattern - 指令歷史學家,學習如何應對老闆的反悔天賦:「我說過的話你都要記住,而且要能撤回!」
準備迎接可撤銷操作的挑戰! ⏪