概念

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

主要角色

  • 抽象策略(Strategy)类:公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
  • 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。 环境(Context)类:持有一个策略类的引用,最终给客户端调用 ```java /**

    • 抽象策略(Strategy)类 */ public interface GameStrategy {

      //战斗策略 void warStrategy();

}

  1. ```java
  2. /**
  3. * 具体策略(Concrete Strategy)类
  4. */
  5. public class RandomStrategy implements GameStrategy{
  6. @Override
  7. public void warStrategy() {
  8. System.out.println("大乱斗...");
  9. }
  10. }
  1. /**
  2. * 具体策略(Concrete Strategy)类
  3. */
  4. public class SteadyStrategy implements GameStrategy {
  5. @Override
  6. public void warStrategy() {
  7. System.out.println("各路小心...及时支援...");
  8. }
  9. }
  1. /**
  2. * 环境类
  3. */
  4. public class TeamGNR {
  5. //抽取游戏策略算法,并进行引用
  6. private GameStrategy gameStrategy;
  7. public void setGameStrategy(GameStrategy gameStrategy) {
  8. this.gameStrategy = gameStrategy;
  9. }
  10. public void startGame(){
  11. System.out.println("游戏开始.....");
  12. //游戏策略
  13. gameStrategy.warStrategy();
  14. System.out.println("win......");
  15. }
  16. }

应用场景

  • 使用策略模式可以避免使用多重条件语句,如 if…else 语句、switch…case 语句
  • 什么是Spring的 InstantiationStrategy
  • 线程池拒绝策略