Java 策略模式(Strategy Pattern)是一种行为型设计模式,用于封装一组可以互相替换的算法,使得客户端在不必修改原始代码的情况下,能够选择不同的算法来解决问题。
在策略模式中,通常会定义一个抽象策略接口,其中包含了算法的抽象方法,具体策略类则实现了这个接口,并实现了自己的算法逻辑。此外,还需要一个上下文对象,它包含了一个对抽象策略接口的引用,并通过该引用调用具体策略类的算法。
下面是一个简单的 Java 策略模式的实现示例:
首先定义一个抽象策略接口,其中包含了一个抽象方法 calculate:
public interface CalculationStrategy {
int calculate(int a, int b);
}
然后定义两个具体策略类,分别实现了抽象策略接口,提供了自己的算法逻辑:
public class AddStrategy implements CalculationStrategy {
public int calculate(int a, int b) {
return a + b;
}
}
public class SubtractStrategy implements CalculationStrategy {
public int calculate(int a, int b) {
return a - b;
}
}
最后定义一个上下文对象,它包含了一个对抽象策略接口的引用,并通过该引用调用具体策略类的算法:
public class CalculationContext {
private CalculationStrategy strategy;
public CalculationContext(CalculationStrategy strategy) {
this.strategy = strategy;
}
public void setStrategy(CalculationStrategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int a, int b) {
return strategy.calculate(a, b);
}
}
使用时,我们可以根据不同的需求,选择不同的具体策略类来解决问题:
CalculationContext context = new CalculationContext(new AddStrategy());
System.out.println(context.executeStrategy(3, 4)); // 输出 7
context.setStrategy(new SubtractStrategy());
System.out.println(context.executeStrategy(3, 4)); // 输出 -1
这样,我们就成功地使用了策略模式,将算法的实现与调用代码分离开来,使得我们可以在不修改原始代码的情况下,更换不同的算法实现。