深入浅出设计模式:策略模式详解与实战应用

90 阅读2分钟

深入浅出设计模式:策略模式详解与实战应用

什么是策略模式?

策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户端。

策略模式的核心思想

  1. 定义策略接口:所有具体策略类必须实现的接口。
  2. 具体策略类:实现策略接口的具体算法。
  3. 上下文类:持有一个策略对象的引用,并调用策略对象的算法。

代码示例

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、支付宝等)。策略模式可以灵活地支持这些支付方式的切换,而不需要修改核心业务逻辑。

优势

  1. 开闭原则:新增支付方式时,只需添加新的策略类,无需修改现有代码。
  2. 灵活性:运行时动态切换算法。
  3. 解耦:将算法与业务逻辑分离。

总结

策略模式通过封装算法,提供了一种灵活的方式来应对变化。它特别适用于需要动态切换算法的场景,如支付系统、排序算法等。

希望这篇文章能帮助你理解策略模式的核心思想与应用!