返回
复杂策略 轻松上手--聊聊策略模式
后端
2024-02-15 23:46:15
策略模式到底是什么?
策略模式是一种设计模式,它定义了一系列算法,并将这些算法封装在独立的类中。策略模式允许我们选择一个算法,并在运行时使用它。这使得策略模式非常适合于需要动态改变算法的情况,可以很容易地添加或修改算法,而无需改变客户端代码。
策略模式有哪些优点?
策略模式具有以下优点:
- 解耦:策略模式将算法与客户端代码解耦,使得算法可以独立于客户端代码进行修改和扩展。
- 重用:策略模式可以将算法重用在不同的客户端代码中。
- 灵活:策略模式可以很容易地添加或修改算法,而无需改变客户端代码。
- 可扩展:策略模式可以很容易地扩展,以支持新的算法。
策略模式有哪些缺点?
策略模式也存在以下缺点:
- 增加类的数量:策略模式需要为每种算法创建一个类,这可能会增加类的数量。
- 性能开销:策略模式在每次调用算法时都需要进行一次方法调用,这可能会带来一定的性能开销。
策略模式的应用场景
策略模式可以应用于以下场景:
- 需要动态改变算法的情况。
- 需要将算法重用在不同的客户端代码中。
- 需要很容易地添加或修改算法的情况。
- 需要很容易地扩展,以支持新的算法的情况。
策略模式的示例
下面是一个策略模式的示例:
interface Strategy {
int doOperation(int num1, int num2);
}
class OperationAdd implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
class OperationSubtract implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
class OperationMultiply implements Strategy {
@Override
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 Main {
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));
}
}
在这个示例中,Strategy
接口定义了一个doOperation()
方法,它接收两个参数并返回一个结果。OperationAdd
、OperationSubtract
和OperationMultiply
类实现了Strategy
接口,并提供了不同的算法来计算两个数字的和、差和积。Context
类持有Strategy
接口的引用,并使用它来执行算法。
结论
策略模式是一种非常有用的设计模式,它可以帮助我们解耦算法与客户端代码,并使算法更易于修改和扩展。策略模式可以应用于各种场景,例如需要动态改变算法的情况、需要将算法重用在不同的客户端代码中、需要很容易地添加或修改算法的情况、需要很容易地扩展,以支持新的算法的情况等。