在Java中实现策略模式,可以通过定义一个策略接口和多个具体策略类,然后在上下文类中使用这些策略。以下是一个简单的Java策略模式示例:
策略接口
// 策略接口
public interface Strategy {
void algorithmInterface();
}
具体策略类
// 具体策略A
public class ConcreteStrategyA implements Strategy {
@Override
public void algorithmInterface() {
System.out.println("Algorithm A");
}
}
// 具体策略B
public class ConcreteStrategyB implements Strategy {
@Override
public void algorithmInterface() {
System.out.println("Algorithm B");
}
}
上下文类
// 上下文类
public class Context {
private Strategy strategy;
// 设置策略
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
// 执行策略
public void executeStrategy() {
strategy.algorithmInterface();
}
}
客户端代码
public class StrategyPatternDemo {
public static void main(String[] args) {
Context context = new Context();
// 使用策略A
context.setStrategy(new ConcreteStrategyA());
context.executeStrategy(); // 输出: Algorithm A
// 使用策略B
context.setStrategy(new ConcreteStrategyB());
context.executeStrategy(); // 输出: Algorithm B
}
}
运行结果
Algorithm A
Algorithm B
解释
- Strategy 接口:定义了一个算法接口
algorithmInterface
。 - ConcreteStrategyA 和 ConcreteStrategyB:实现了
Strategy
接口,提供了具体的算法实现。 - Context 类:持有一个
Strategy
对象,并通过setStrategy
方法来设置具体的策略。通过executeStrategy
方法来执行当前策略的算法。 - StrategyPatternDemo:客户端代码,演示了如何使用不同的策略。
通过这种方式,可以在运行时动态地改变对象的行为,而无需修改上下文类的代码。