概念
- 策略(Strategy)模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。属于对象行为模式

主要角色
- 抽象策略(Strategy)类:公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。 环境(Context)类:持有一个策略类的引用,最终给客户端调用 ```java /**
抽象策略(Strategy)类 */ public interface GameStrategy {
//战斗策略 void warStrategy();
}
```java/*** 具体策略(Concrete Strategy)类*/public class RandomStrategy implements GameStrategy{@Overridepublic void warStrategy() {System.out.println("大乱斗...");}}
/*** 具体策略(Concrete Strategy)类*/public class SteadyStrategy implements GameStrategy {@Overridepublic void warStrategy() {System.out.println("各路小心...及时支援...");}}
/*** 环境类*/public class TeamGNR {//抽取游戏策略算法,并进行引用private GameStrategy gameStrategy;public void setGameStrategy(GameStrategy gameStrategy) {this.gameStrategy = gameStrategy;}public void startGame(){System.out.println("游戏开始.....");//游戏策略gameStrategy.warStrategy();System.out.println("win......");}}
应用场景
- 使用策略模式可以避免使用多重条件语句,如 if…else 语句、switch…case 语句
- 什么是Spring的 InstantiationStrategy
- 线程池拒绝策略
