Java 策略模式(Strategy Pattern)詳解
🧠 什么是策略模式?
策略模式是一種行為型設計模式,它定義了一系列算法,把它們一個個封裝起來,并且使它們可以互相替換。策略模式讓算法獨立于使用它的客戶端獨立變化。
🎯 使用場景
- 多種算法或行為頻繁切換
- 避免冗長的
if-else
或switch
語句 - 希望將行為的選擇交由客戶端決定
🏗? 模式結構
- Context(上下文):維護一個對策略對象的引用
- Strategy(抽象策略類):定義所有支持的算法的公共接口
- ConcreteStrategy(具體策略類):實現具體的算法
? 示例:支付策略
策略接口(Strategy)
public interface PaymentStrategy {void pay(int amount);
}
具體策略(ConcreteStrategy)
public class CreditCardPayment implements PaymentStrategy {private String cardNumber;public CreditCardPayment(String cardNumber) {this.cardNumber = cardNumber;}@Overridepublic void pay(int amount) {System.out.println("使用信用卡支付 " + amount + " 元,卡號:" + cardNumber);}
}public class WeChatPayment implements PaymentStrategy {@Overridepublic void pay(int amount) {System.out.println("使用微信支付 " + amount + " 元");}
}
上下文類(Context)
public class PaymentContext {private PaymentStrategy strategy;public void setStrategy(PaymentStrategy strategy) {this.strategy = strategy;}public void executePayment(int amount) {strategy.pay(amount);}
}
客戶端調用
public class Client {public static void main(String[] args) {PaymentContext context = new PaymentContext();context.setStrategy(new CreditCardPayment("1234-5678-9876"));context.executePayment(500);context.setStrategy(new WeChatPayment());context.executePayment(300);}
}
? 優點
- 避免大量條件語句
- 易于擴展新策略,符合開閉原則
- 提高算法或行為的靈活性
?? 缺點
- 增加了類的數量
- 客戶端必須了解所有策略,才能選擇合適的
🧩 使用建議
當你有多種行為變化的情況,并希望通過多態將它們分開處理時,策略模式是一個很優雅的選擇。