策略设计模式分析

发布于:2025-07-20 ⋅ 阅读:(10) ⋅ 点赞:(0)

策略设计模式概述

策略模式(Strategy Pattern)属于行为型设计模式,允许在运行时动态选择算法或行为。它将算法封装成独立的类,使得它们可以相互替换,而不会影响客户端代码。

核心组件

1. 策略接口(Strategy Interface)
定义所有具体策略的通用接口,声明算法的方法。

public interface PaymentStrategy {
    void pay(int amount);
}

2. 具体策略类(Concrete Strategies)
实现策略接口,提供具体的算法实现。

public class CreditCardPayment implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("Paid " + amount + " via Credit Card");
    }
}

public class PayPalPayment implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("Paid " + amount + " via PayPal");
    }
}

3. 上下文类(Context)
持有策略对象的引用,并提供方法调用策略的算法。

public class PaymentContext {
    private PaymentStrategy strategy;

    public PaymentContext(PaymentStrategy strategy) {
        this.strategy = strategy;
    }

    public void executePayment(int amount) {
        strategy.pay(amount);
    }
}

使用示例

public class Main {
    public static void main(String[] args) {
        PaymentContext context = new PaymentContext(new CreditCardPayment());
        context.executePayment(100);  // 输出: Paid 100 via Credit Card

        context = new PaymentContext(new PayPalPayment());
        context.executePayment(200);  // 输出: Paid 200 via PayPal
    }
}

优势

  • 开闭原则:无需修改上下文即可扩展新策略。
  • 消除条件语句:避免复杂的if-elseswitch逻辑。
  • 动态切换:运行时灵活更换算法。

适用场景

  • 需要多种算法变体,且希望客户端代码与算法解耦。
  • 算法需要频繁切换或扩展。
  • 隐藏算法实现细节,仅暴露接口。

注意事项

  • 策略类数量过多时可能增加系统复杂度。
  • 客户端需了解不同策略的差异以选择合适的实现。

网站公告

今日签到

点亮在社区的每一天
去签到