什么是策略模式?
策略模式(Strategy Pattern)是一种行为设计模式,用于在运行时选择算法的行为。它允许在不修改客户端代码的情况下动态地改变对象的行为。
在策略模式中,首先定义一个公共接口或抽象类,该接口或抽象类定义了一系列可互相替换的算法(即策略)。然后,针对每种具体的策略,都实现一个具体的类来实现这个接口,提供相应的算法实现。客户端通过传递不同的策略对象,可以在运行时选择不同的算法。
代码实例
// 定义策略接口
interface Strategy {
void execute();
}
// 实现具体的策略类
class ConcreteStrategyA implements Strategy {
@Override
public void execute() {
System.out.println("执行策略A");
}
}
class ConcreteStrategyB implements Strategy {
@Override
public void execute() {
System.out.println("执行策略B");
}
}
// 定义上下文类,用于执行策略
class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void executeStrategy() {
strategy.execute();
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
Context context = new Context();
Strategy strategyA = new ConcreteStrategyA();
context.setStrategy(strategyA);
context.executeStrategy(); // 输出:执行策略A
Strategy strategyB = new ConcreteStrategyB();
context.setStrategy(strategyB);
context.executeStrategy(); // 输出:执行策略B
}
}
在上述代码中,我们定义了一个策略接口Strategy
,并实现了两个具体的策略类ConcreteStrategyA
和ConcreteStrategyB
。Context
类是上下文类,负责执行策略。客户端代码通过创建不同的策略对象并将其传递给Context
类,可以在运行时选择不同的算法执行。
策略模式的主要优点包括:
- 策略类之间的相互独立,可以方便地扩展和修改策略。
- 策略模式避免了使用条件语句进行算法选择,提高了代码的可读性和维护性。
- 策略模式使策略的选择与使用相分离,客户端可以灵活地选择不同的策略。
策略模式在许多场景下都有应用,例如排序算法的选择、支付方式的选择、文件压缩算法的选择等。它是一种强大而灵活的设计模式,能够让系统在运行时根据需求选择合适的算法。