请编写一个策略模式的实际应用案例代码,并解释其工作原理。

让我们考虑一种常见的真实场景:电商平台的支付系统。一个电商平台可能支持多种支付方式,如信用卡支付、PayPal 支付、银行转账等。这是一个典型的策略模式的应用场景。

首先,我们定义一个支付策略接口:

public interface PaymentStrategy {
    void pay(double amount);
}

然后,我们为每种支付方式定义一个具体的支付策略:

public class CreditCardPaymentStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("Paid " + amount + " using Credit Card.");
    }
}

public class PayPalPaymentStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("Paid " + amount + " using PayPal.");
    }
}

public class BankTransferPaymentStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("Paid " + amount + " using Bank Transfer.");
    }
}

接下来,我们定义一个购物车类,它允许我们选择支付策略:

public class ShoppingCart {
    private PaymentStrategy paymentStrategy;
    private List<Item> items;

    // ...其他方法,如添加商品、计算总价等...

    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void pay() {
        double amount = calculateTotal();
        paymentStrategy.pay(amount);
    }
}

现在,客户端代码可以在运行时选择支付策略:

public class Client {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        // 添加一些商品到购物车...

        // 选择支付策略并支付
        cart.setPaymentStrategy(new CreditCardPaymentStrategy());
        cart.pay();

        // 更改支付策略并支付
        cart.setPaymentStrategy(new PayPalPaymentStrategy());
        cart.pay();
    }
}

在这个例子中,PaymentStrategy 是我们的策略接口,CreditCardPaymentStrategyPayPalPaymentStrategyBankTransferPaymentStrategy 是具体策略,ShoppingCart 是上下文。客户端代码可以在运行时选择不同的支付策略。

注意,这只是一个简单的例子,真实的支付系统会更复杂,需要处理一些额外的问题,如支付失败的处理、安全性等。

发表评论

后才能评论