Java中的策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。
策略模式的关键特点如下:
- 定义策略接口:策略模式首先定义一个策略接口,用于规范所有策略算法的公共操作和属性。
- 具体策略类:实现策略接口的多个具体策略类,每个具体策略类实现了策略接口中的抽象方法,定义了特定的算法。
- 环境类:环境类负责维护一个策略对象的引用,客户端通过环境类来选择和使用策略对象。
策略模式的基本实现如下:
// 策略接口
public interface Strategy {void execute();
}
// 具体策略类1
public class ConcreteStrategyA implements Strategy {public void execute() {System.out.println("执行策略A");}
}
// 具体策略类2
public class ConcreteStrategyB implements Strategy {public void execute() {System.out.println("执行策略B");}
}
// 环境类
public class Context {private Strategy strategy;public Context(Strategy strategy) {this.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(new ConcreteStrategyA());context.executeStrategy(); // 输出 "执行策略A"context.setStrategy(new ConcreteStrategyB());context.executeStrategy(); // 输出 "执行策略B"}
}
策略模式的优点包括:
- 算法可以独立于使用算法的客户变化。
- 增加新算法变得容易,只需要添加一个新的具体策略类即可。
- 客户端与具体策略类解耦,客户端只需要知道策略接口,不需要知道具体策略类的实现。
策略模式的缺点是可能会导致系统中类的数量增加,因为每增加一种策略就需要增加一个具体策略类。
策略模式通常用于需要多种算法或策略选择的场景,例如排序算法、状态机、游戏中的不同难度级别等。通过使用策略模式,可以方便地切换算法或策略,而无需修改现有的代码。