1. 概念
策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,将每一个算法封装起来,并使它们可以互换。策略模式让算法独立于使用它的客户端独立变化。
2. 优点
- 灵活性:可以在运行时选择具体的策略,方便扩展和修改。
- 减少条件语句:将复杂的条件判断逻辑转化为策略类,简化代码结构。
- 提高可维护性:每个策略类都可以独立维护,符合单一职责原则。
3. 缺点
- 增加类的数量:每个策略都需要一个独立的类,可能导致类的数量增加。
- 客户端必须了解所有策略:客户端需要了解所有可用的策略,可能增加复杂性。
4. 组成部分
- 具体策略类(ConcreteStrategy):实现策略接口的具体算法。
- 上下文(Context):持有一个策略类的引用,并可以在运行时切换策略。
5. 使用场景
- 当一个类需要在多个算法之间进行选择时。
- 当算法的变化独立于使用算法的客户时。
- 需要使用不同的算法来处理同一问题时。
6. 代码示例
策略接口
public interface Strategy {
int execute(int a, int b);
}
具体策略类
public class AddStrategy implements Strategy {
@Override
public int execute(int a, int b) {
return a + b;
}
}
public class SubtractStrategy implements Strategy {
@Override
public int execute(int a, int b) {
return a - b;
}
}
上下文
public class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int a, int b) {
return strategy.execute(a, b);
}
}
测试使用
public class Test {
public static void main(String[] args) {
Context context = new Context();
// 使用加法策略
context.setStrategy(new AddStrategy());
System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
// 使用减法策略
context.setStrategy(new SubtractStrategy());
System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
}
}
7. 总结
策略模式通过将算法封装在独立的策略类中,使得算法可以在运行时动态切换,增强了系统的灵活性和可维护性。虽然可能会增加类的数量,但在需要多种算法选择的场景下,策略模式是一个非常有效的解决方案。