23种设计模式-行为型模式之策略模式(Java版本)
Java 策略模式(Strategy Pattern)详解
🧠 什么是策略模式?
策略模式是一种行为型设计模式,它定义了一系列算法,把它们一个个封装起来,并且使它们可以互相替换。策略模式让算法独立于使用它的客户端独立变化。
🎯 使用场景
- 多种算法或行为频繁切换
- 避免冗长的
if-else
或switch
语句 - 希望将行为的选择交由客户端决定
🏗️ 模式结构
- Context(上下文):维护一个对策略对象的引用
- Strategy(抽象策略类):定义所有支持的算法的公共接口
- ConcreteStrategy(具体策略类):实现具体的算法
✅ 示例:支付策略
策略接口(Strategy)
public interface PaymentStrategy {void pay(int amount);
}
具体策略(ConcreteStrategy)
public class CreditCardPayment implements PaymentStrategy {private String cardNumber;public CreditCardPayment(String cardNumber) {this.cardNumber = cardNumber;}@Overridepublic void pay(int amount) {System.out.println("使用信用卡支付 " + amount + " 元,卡号:" + cardNumber);}
}public class WeChatPayment implements PaymentStrategy {@Overridepublic void pay(int amount) {System.out.println("使用微信支付 " + amount + " 元");}
}
上下文类(Context)
public class PaymentContext {private PaymentStrategy strategy;public void setStrategy(PaymentStrategy strategy) {this.strategy = strategy;}public void executePayment(int amount) {strategy.pay(amount);}
}
客户端调用
public class Client {public static void main(String[] args) {PaymentContext context = new PaymentContext();context.setStrategy(new CreditCardPayment("1234-5678-9876"));context.executePayment(500);context.setStrategy(new WeChatPayment());context.executePayment(300);}
}
✅ 优点
- 避免大量条件语句
- 易于扩展新策略,符合开闭原则
- 提高算法或行为的灵活性
⚠️ 缺点
- 增加了类的数量
- 客户端必须了解所有策略,才能选择合适的
🧩 使用建议
当你有多种行为变化的情况,并希望通过多态将它们分开处理时,策略模式是一个很优雅的选择。