深入浅出设计模式:策略模式详解与实战应用
什么是策略模式?
策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户端。
策略模式的核心思想
- 定义策略接口:所有具体策略类必须实现的接口。
- 具体策略类:实现策略接口的具体算法。
- 上下文类:持有一个策略对象的引用,并调用策略对象的算法。
代码示例
1. 定义策略接口
public interface PaymentStrategy {
void pay(int amount);
}
2. 实现具体策略类
public class CreditCardPayment implements PaymentStrategy {
private String cardNumber;
private String name;
public CreditCardPayment(String cardNumber, String name) {
this.cardNumber = cardNumber;
this.name = name;
}
@Override
public void pay(int amount) {
System.out.println("Paid " + amount + " via Credit Card.");
}
}
public class PayPalPayment implements PaymentStrategy {
private String email;
public PayPalPayment(String email) {
this.email = email;
}
@Override
public void pay(int amount) {
System.out.println("Paid " + amount + " via PayPal.");
}
}
3. 上下文类
public class ShoppingCart {
private PaymentStrategy paymentStrategy;
public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
public void checkout(int amount) {
paymentStrategy.pay(amount);
}
}
4. 客户端调用
public class Client {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
// 使用信用卡支付
cart.setPaymentStrategy(new CreditCardPayment("1234-5678-9012-3456", "John Doe"));
cart.checkout(100);
// 使用PayPal支付
cart.setPaymentStrategy(new PayPalPayment("john.doe@example.com"));
cart.checkout(200);
}
}
应用场景:电商支付系统
在电商系统中,用户可以选择多种支付方式(如信用卡、PayPal、支付宝等)。策略模式可以灵活地支持这些支付方式的切换,而不需要修改核心业务逻辑。
优势
- 开闭原则:新增支付方式时,只需添加新的策略类,无需修改现有代码。
- 灵活性:运行时动态切换算法。
- 解耦:将算法与业务逻辑分离。
总结
策略模式通过封装算法,提供了一种灵活的方式来应对变化。它特别适用于需要动态切换算法的场景,如支付系统、排序算法等。
希望这篇文章能帮助你理解策略模式的核心思想与应用!