策略模式
时间: 2023-07-05 12:15:52 浏览: 61
策略模式是一种行为型设计模式,它定义了一组算法,将每个算法都封装到具有共同接口的独立类中,让它们之间可以互相替换。这种模式使得算法可以独立于使用它们的客户端而变化。
策略模式包含三个角色:上下文(Context)、策略(Strategy)和具体策略(ConcreteStrategy)。其中,上下文(Context)持有一个策略(Strategy)对象,并在需要时调用策略对象的方法。策略(Strategy)是一个接口或抽象类,定义了算法的公共接口。具体策略(ConcreteStrategy)是策略(Strategy)的具体实现,封装了不同的算法。
在 Java 中,可以通过创建一个策略接口和多个具体策略类来实现策略模式。例如:
```java
// 定义策略接口
public interface Strategy {
public int doOperation(int num1, int num2);
}
// 定义具体策略类
public class OperationAdd implements Strategy {
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
public class OperationSubtract implements Strategy {
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
public class OperationMultiply implements Strategy {
public int doOperation(int num1, int num2) {
return num1 * num2;
}
}
// 定义上下文类
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2){
return strategy.doOperation(num1, num2);
}
}
// 使用策略模式
public class StrategyPatternDemo {
public static void main(String[] args) {
Context context = new Context(new OperationAdd());
System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
context = new Context(new OperationSubtract());
System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
context = new Context(new OperationMultiply());
System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
}
}
```
在这个例子中,策略接口定义了 `doOperation` 方法,具体策略类实现了这个方法,并封装了不同的算法。上下文类持有一个策略对象,并在需要时调用策略对象的方法。最后,通过创建不同的具体策略对象来实现不同的算法。