Java 设计模式之策略模式 (Strategy Pattern) 详解
策略模式(Strategy Pattern)是一种行为型设计模式,旨在定义一系列算法,将每个算法封装起来,并使它们可以互相替换,从而使得算法的变化不会影响使用算法的客户端。策略模式的主要结构包括策略接口、具体策略类和上下文类,通过将算法的选择与使用分离,实现了代码的可维护性和灵活性。
更多设计模式请参考:
Java 中的 23 种设计模式详解
1. 策略模式的动机
在软件开发中,经常遇到需要在运行时动态选择一种算法的情况。例如,排序算法、支付方式、文件压缩等场景都可能需要在不同条件下选择不同的算法实现。如果在客户端代码中硬编码这些算法的选择逻辑,会导致代码难以维护和扩展。策略模式通过将算法的选择和实现分离,使得算法可以独立变化,客户端代码可以更简洁和灵活。
2. 策略模式的结构
策略模式包含以下几部分:
- 策略接口(Strategy Interface):定义所有支持的算法的公共接口。
- 具体策略类(Concrete Strategies):实现策略接口,定义具体的算法。
- 上下文类(Context Class):使用一个具体策略对象来配置,并维护对策略对象的引用。
3. 策略模式的UML类图
4. 策略模式的实现
以下是一个使用策略模式的Java示例,该示例演示了如何选择不同的策略来执行操作:
4.1 策略接口
// 定义策略接口
public interface Strategy {
void execute();
}
4.2 具体策略类
// 具体策略A
public class ConcreteStrategyA implements Strategy {
@Override
public void execute() {
System.out.println("执行策略A");
}
}
// 具体策略B
public class ConcreteStrategyB implements Strategy {
@Override
public void execute() {
System.out.println("执行策略B");
}
}
4.3 上下文类
// 上下文类
public class Context {
private Strategy strategy;
// 设置策略
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
// 执行策略
public void executeStrategy() {
if (strategy == null) {
throw new IllegalStateException("Strategy未设置");
}
strategy.execute();
}
}
4.4 客户端代码
public class StrategyPatternDemo {
public static void main(String[] args) {
Context context = new Context(