策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法独立于使用它的客户端代码,使得算法的变化不会影响到使用该算法的客户端。
// 策略接口
public interface PaymentStrategy {
void pay(double amount);
}
// 具体策略类:信用卡支付策略
public class CreditCardStrategy implements PaymentStrategy {
@Override
public void pay(double amount) {
System.out.println("Paid " + amount + " using credit card.");
// 实际支付逻辑...
}
}
// 具体策略类:支付宝支付策略
public class AlipayStrategy implements PaymentStrategy {
@Override
public void pay(double amount) {
System.out.println("Paid " + amount + " using Alipay.");
// 实际支付逻辑...
}
}
// 上下文:购物车
public class ShoppingCart {
private List<Item> items;
private PaymentStrategy paymentStrategy;
public void setPaymentStrategy(PaymentStrategy strategy) {
this.paymentStrategy = strategy;
}
public void checkout() {
double total = calculateTotal();
paymentStrategy.pay(total);
}
// 其他购物车相关的方法...
}
// 客户端使用示例
public class Client {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
// 设置支付策略为信用卡支付
cart.setPaymentStrategy(new CreditCardStrategy());
cart.checkout(); // 输出:Paid ... using credit card.
// 改变支付策略为支付宝支付
cart.setPaymentStrategy(new AlipayStrategy());
cart.checkout(); // 输出:Paid ... using Alipay.
}
}
设想你经营一家餐厅,顾客可以选择不同的支付方式进行结账,比如现金、刷卡或手机支付。每种支付方式就是一个策略,当顾客选择某种支付方式时,服务员就执行相应的“策略”,即进行相应的支付处理。策略模式在这里的作用就是让服务员(上下文)可以根据客户要求灵活地调用不同支付方式(策略)的结账流程,而无需知道每种支付方式的具体实现细节。