策略模式
策略模式是一種行為設計模式,它定義了一系列演算法,並將每個演算法封裝在獨立的可互換的策略類中,使得演算法可以獨立於客戶端而變化。
下面是使用Java編寫的一個簡單的策略模式示例:
// 策略介面
interface PaymentStrategy {
void pay(double amount);
}
// 具體策略類1
class CreditCardPayment implements PaymentStrategy {
private String cardNumber;
private String cvv;
public CreditCardPayment(String cardNumber, String cvv) {
this.cardNumber = cardNumber;
this.cvv = cvv;
}
@Override
public void pay(double amount) {
System.out.println("Paying $" + amount + " with credit card: " + cardNumber);
}
}
// 具體策略類2
class PayPalPayment implements PaymentStrategy {
private String email;
private String password;
public PayPalPayment(String email, String password) {
this.email = email;
this.password = password;
}
@Override
public void pay(double amount) {
System.out.println("Paying $" + amount + " with PayPal account: " + email);
}
}
// 環境類
class ShoppingCart {
private PaymentStrategy paymentStrategy;
public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
public void checkout(double amount) {
paymentStrategy.pay(amount);
}
}
// 示例
public class Main {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
// 使用信用卡支付
PaymentStrategy creditCardPayment = new CreditCardPayment("1234567890", "123");
cart.setPaymentStrategy(creditCardPayment);
cart.checkout(100.50);
// 使用PayPal支付
PaymentStrategy payPalPayment = new PayPalPayment("example@example.com", "password");
cart.setPaymentStrategy(payPalPayment);
cart.checkout(250.75);
}
}
在這個示例中,我們定義了一個策略介面 PaymentStrategy
,並實現了兩個具體的策略類 CreditCardPayment
和 PayPalPayment
。然後,我們建立了一個環境類 ShoppingCart
,它具有一個 paymentStrategy
成員變數,用於執行支付操作。透過設定不同的策略,我們可以在購物車中使用不同的支付方式進行結賬。
在示例中,我們首先使用信用卡支付了購物車中的商品,然後使用 PayPal 賬戶進行支付。透過策略模式,我們可以動態地切換不同的支付策略,而不需要修改 ShoppingCart
類的程式碼。
策略模式使得演算法的實現獨立於客戶端,並可以在執行時動態選擇不同的演算法,提高了程式碼的靈活性和可擴充套件性。