策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,并且使它们可以相互替换。策略模式可以让算法的变化独立于使用它们的客户端。
策略模式中通常包含以下角色:文章源自新逸网络-https://www.xinac.net/9370.html
1. 抽象策略(Strategy):定义了所有具体策略类的公共接口,包含了算法的输入和输出。文章源自新逸网络-https://www.xinac.net/9370.html
2. 具体策略(Concrete Strategy):实现了抽象策略接口,并且提供了具体的算法实现。文章源自新逸网络-https://www.xinac.net/9370.html
3. 环境(Context):维护一个对抽象策略对象的引用,并且负责将请求委托给当前策略对象处理。文章源自新逸网络-https://www.xinac.net/9370.html
下面是一个简单的 Java 实现策略模式的示例:文章源自新逸网络-https://www.xinac.net/9370.html
// 抽象策略
interface Strategy {
int doOperation(int num1, int num2);
}
// 具体策略
class OperationAdd implements Strategy {
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
class OperationSubtract implements Strategy {
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
class OperationMultiply implements Strategy {
public int doOperation(int num1, int num2) {
return num1 * num2;
}
}
// 环境
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 Client {
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));
}
}在上面的示例中,抽象策略接口定义了所有具体策略类的公共接口,包含了算法的输入和输出。具体策略类实现了抽象策略接口,并且提供了具体的算法实现。环境类维护一个对抽象策略对象的引用,并且负责将请求委托给当前策略对象处理。文章源自新逸网络-https://www.xinac.net/9370.html
使用策略模式可以实现算法的解耦,使得算法的变化独立于使用它们的客户端。同时,策略模式可以提高代码的重用性和可扩展性,因为不同的策略可以共享相同的算法逻辑。但是需要注意的是,由于策略模式需要创建多个策略类,因此可能会增加系统的复杂度和内存消耗。文章源自新逸网络-https://www.xinac.net/9370.html 文章源自新逸网络-https://www.xinac.net/9370.html










评论