策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以互相替换。这样客户端在使用算法时可以独立于具体的算法实现,而是通过指定不同的策略来达到不同的行为。
在策略模式中,主要有以下几个角色:
1. Context(上下文):定义了一个接口,用于在运行时设置和切换不同的策略。
2. Strategy(策略):定义了所有支持的算法的公共接口。
3. ConcreteStrategy(具体策略):实现了具体的算法。
下面是一个简单的Java示例,演示策略模式的实现:
// 策略接口
interface PaymentStrategy {
void pay(int amount);
}
// 具体策略类:支付方式A
class CreditCardPayment implements PaymentStrategy {
@Override
public void pay(int amount) {
System.out.println("Paid " + amount + " using Credit Card");
}
}
// 具体策略类:支付方式B
class PayPalPayment implements PaymentStrategy {
@Override
public void pay(int amount) {
System.out.println("Paid " + amount + " using PayPal");
}
}
// 上下文类
class ShoppingCart {
private PaymentStrategy paymentStrategy;
public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
public void checkout(int amount) {
paymentStrategy.pay(amount);
}
}
public class StrategyPatternExample {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
// 使用Credit Card支付
cart.setPaymentStrategy(new CreditCardPayment());
cart.checkout(100);
// 使用PayPal支付
cart.setPaymentStrategy(new PayPalPayment());
cart.checkout(200);
}
}
在这个例子中,策略模式通过定义支付策略接口(`PaymentStrategy`)和具体支付策略类(`CreditCardPayment`和`PayPalPayment`)来实现不同的支付方式。`ShoppingCart`类作为上下文类,可以设置不同的支付策略,并在`checkout()`方法中调用相应的支付方法。通过策略模式,客户端可以根据需要动态切换支付方式,而不需要改变整个购物车类的逻辑,从而提高了代码的灵活性和可维护性。