请编写一个策略模式的实际应用案例代码,并解释其工作原理。
让我们考虑一种常见的真实场景:电商平台的支付系统。一个电商平台可能支持多种支付方式,如信用卡支付、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
是我们的策略接口,CreditCardPaymentStrategy
、PayPalPaymentStrategy
和 BankTransferPaymentStrategy
是具体策略,ShoppingCart
是上下文。客户端代码可以在运行时选择不同的支付策略。
注意,这只是一个简单的例子,真实的支付系统会更复杂,需要处理一些额外的问题,如支付失败的处理、安全性等。