11.4

liuxuechao發表於2024-11-20

策略模式

策略模式是一種行為設計模式,它定義了一系列演算法,並將每個演算法封裝在獨立的可互換的策略類中,使得演算法可以獨立於客戶端而變化。

下面是使用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,並實現了兩個具體的策略類 CreditCardPaymentPayPalPayment。然後,我們建立了一個環境類 ShoppingCart,它具有一個 paymentStrategy 成員變數,用於執行支付操作。透過設定不同的策略,我們可以在購物車中使用不同的支付方式進行結賬。

在示例中,我們首先使用信用卡支付了購物車中的商品,然後使用 PayPal 賬戶進行支付。透過策略模式,我們可以動態地切換不同的支付策略,而不需要修改 ShoppingCart 類的程式碼。

策略模式使得演算法的實現獨立於客戶端,並可以在執行時動態選擇不同的演算法,提高了程式碼的靈活性和可擴充套件性。

相關文章