策略设计模式概述
策略模式(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-else
或switch
逻辑。 - 动态切换:运行时灵活更换算法。
适用场景
- 需要多种算法变体,且希望客户端代码与算法解耦。
- 算法需要频繁切换或扩展。
- 隐藏算法实现细节,仅暴露接口。
注意事项
- 策略类数量过多时可能增加系统复杂度。
- 客户端需了解不同策略的差异以选择合适的实现。