java
// 定义策略接口
interface Strategy {
void execute();
}
// 实现具体策略1
class ConcreteStrategy1 implements Strategy {
@Override
public void execute() {
System.out.println("执行策略1");
}
}
// 实现具体策略2
class ConcreteStrategy2 implements Strategy {
@Override
public void execute() {
System.out.println("执行策略2");
}
}
// 上下文类
class Context {
private Strategy strategy;
// 设置具体策略
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
// 调用策略的执行方法
public void executeStrategy() {
strategy.execute();
}
}
public class StrategyPatternDemo {
public static void main(String[] args) {
// 创建上下文对象
Context context = new Context();
// 设置具体策略1
Strategy strategy1 = new ConcreteStrategy1();
context.setStrategy(strategy1);
// 执行策略1
context.executeStrategy();
// 设置具体策略2
Strategy strategy2 = new ConcreteStrategy2();
context.setStrategy(strategy2);
// 执行策略2
context.executeStrategy();
}
}
在这个示例中,首先定义了一个策略接口 Strategy,其中包含一个 execute() 方法表示执行策略的操作。然后,分别实现了两个具体策略类 ConcreteStrategy1 和 ConcreteStrategy2,它们分别实现了不同的策略。接着,我们定义了一个上下文类 Context,该类有一个成员变量 strategy 表示当前采用的策略。
在主函数中,我们创建了一个上下文对象 Context,并设置具体的策略1,然后调用上下文对象的 executeStrategy() 方法,执行了策略1。接着,我们又设置了具体的策略2,并再次调用 executeStrategy() 方法,执行了策略2。
运行上述示例代码,输出结果为:
bash
执行策略1
执行策略2
通过使用策略模式,可以使得算法的选择和使用与算法的实现相分离。上下文类通过持有策略对象,可以根据需求动态地切换不同的策略,从而实现不同的行为。这样既增加了代码的灵活性,又避免了大量的条件语句。希望这个示例能够帮助你理解策略模式的使用。