策略模式定義
策略模式(Strategy Pattern)是一種行為設計模式,允許在運行時選擇算法的行為。它將算法封裝成獨立的類,使得它們可以相互替換,而不影響客戶端代碼。
核心組成
Context(上下文):持有一個策略對象的引用,負責調用策略的具體實現。
Strategy(策略接口):定義所有支持的算法或行為的公共接口。
ConcreteStrategy(具體策略):實現策略接口的具體算法或行為。
實現示例(Java代碼)
// 策略接口
interface PaymentStrategy { void pay(int amount);
} // 具體策略:信用卡支付
class CreditCardPayment implements PaymentStrategy { private String cardNumber; public CreditCardPayment(String cardNumber) { this.cardNumber = cardNumber; } @Override public void pay(int amount) { System.out.println("Paid " + amount + " via Credit Card: " + cardNumber); }
} // 具體策略:支付寶支付
class AlipayPayment implements PaymentStrategy { private String account; public AlipayPayment(String account) { this.account = account; } @Override public void pay(int amount) { System.out.println("Paid " + amount + " via Alipay: " + account); }
} // 上下文類
class ShoppingCart { private PaymentStrategy paymentStrategy; public void setPaymentStrategy(PaymentStrategy strategy) { this.paymentStrategy = strategy; } public void checkout(int amount) { paymentStrategy.pay(amount); }
} // 客戶端代碼
public class Main { public static void main(String[] args) { ShoppingCart cart = new ShoppingCart(); cart.setPaymentStrategy(new CreditCardPayment("1234-5678-9012")); cart.checkout(100); cart.setPaymentStrategy(new AlipayPayment("user@example.com")); cart.checkout(200); }
}
適用場景
需要動態切換算法或行為時(如支付方式、排序算法)。
避免多重條件判斷(如大量的 if-else 或 switch 語句)。
需要隔離算法邏輯與客戶端代碼。