策略模式概述

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

核心结构

策略模式通常包含以下三个角色:

  • Context(上下文):持有一个策略类的引用,用于调用具体的策略。
  • Strategy(策略接口):定义所有支持的算法或行为的公共接口。
  • ConcreteStrategy(具体策略):实现策略接口的具体算法或行为。

实现示例

以下是一个用Java实现的策略模式示例:

// 策略接口
interface PaymentStrategy {
    void pay(int amount);
}

// 具体策略:信用卡支付
class CreditCardPayment implements PaymentStrategy {
    private String cardNumber;

    public CreditCardPayment(String cardNumber) {
        this.cardNumber = cardNumber;
    }

    @Override
    public void pay(int amount) {
        System.out.println("Paid " + amount + " using credit card: " + cardNumber);
    }
}

// 具体策略:PayPal支付
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 + " using PayPal: " + email);
    }
}

// 上下文类
class ShoppingCart {
    private PaymentStrategy paymentStrategy;

    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void checkout(int amount) {
        paymentStrategy.pay(amount);
    }
}

// 客户端代码
public class StrategyPatternDemo {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        // 使用信用卡支付
        cart.setPaymentStrategy(new CreditCardPayment("1234-5678-9012-3456"));
        cart.checkout(100);

        // 使用PayPal支付
        cart.setPaymentStrategy(new PayPalPayment("user@example.com"));
        cart.checkout(200);
    }
}

应用场景

策略模式适用于以下场景:

  • 一个系统需要动态地在几种算法中选择一种。
  • 避免使用多重条件判断语句,尤其是条件语句中涉及大量逻辑时。
  • 需要封装算法,使其对客户端透明。

优点

  • 开闭原则:可以在不修改上下文代码的情况下引入新的策略。
  • 消除条件语句:避免使用大量的条件语句来选择不同的行为。
  • 提高可维护性:每种策略都是独立的类,便于单独测试和维护。

缺点

  • 客户端必须了解策略:客户端需要知道不同策略之间的区别以选择合适的策略。
  • 增加对象数量:每个具体策略都是一个类,可能会增加系统中的类数量。

实际应用案例

策略模式在现实中有广泛的应用,例如:

  • 支付系统:支持多种支付方式(信用卡、PayPal、支付宝等)。
  • 排序算法:根据数据规模动态选择快速排序、归并排序等算法。
  • 导航系统:根据用户需求选择最短路径、最少时间等不同策略。

总结

策略模式通过将算法封装到独立的策略类中,使得它们可以相互替换,从而提高了系统的灵活性和可扩展性。该模式特别适用于需要动态切换算法或行为的场景,是设计模式中常用且强大的一种。

https://github.com/mjkoehner/urg_vtee
https://github.com/haron-user/bdm_pt8k
https://github.com/sachinmirr/tef_lmbd
https://github.com/abtorre/h1w_ph43
https://github.com/tennabrasde/ism_mrrd

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐