设计模式学习

时间:2024-04-29 07:32:07

设计模式学习

  • 设计模式学习
    • 策略模式
      • 策略模式适用于以下场景:

设计模式学习

策略模式

策略模式适用于以下场景:

  1. 对象有多种行为或算法,需要根据不同情况选择不同的算法。
  2. 系统中有多个类实现相同的接口或继承相同的抽象类,但具体实现不同。
  3. 需要在运行时动态地添加、删除或切换算法,而不影响客户端代码。
  4. 一个类有多种变形或状态,每个状态有不同的行为,需要根据状态动态改变对象的行为。

第一步:定义策略接口

/**
 * 打游戏策略接口
 * 策略接口定义行为
 * @author wangpeng
 * @ClassName PlayGameStategy
 * @description
 * @date 2024/4/24 16:39
 */
public interface PlayGameStategy {
	/**
     * 打游戏
     * @return
     */
    String playGame();
}

第二步:定义上下文类

/**
 * 上下文
 * @author wangpeng
 * @ClassName PlayGameContext
 * @date 2024/4/24 16:40
 */

public class PlayGameContext {
    private PlayGameStategy playGameStategy;

    public PlayGameContext(PlayGameStategy playGameStategy) {
        this.playGameStategy = playGameStategy;
    }

    public String playGame() {
        return playGameStategy.playGame();
    }

}

第三步:创建要打的游戏类,LOL、Pubg

/**
 * @author wangpeng
 * @ClassName Pubg
 * @description TODO
 * @date 2024/4/24 16:43
 */

public class Lol implements PlayGameStategy {


    @Override
    public String playGame() {
        return "LoL启动!";
    }
}

/**
 * @author wangpeng
 * @ClassName Pubg
 * @description TODO
 * @date 2024/4/24 16:43
 */

public class Pubg implements PlayGameStategy {
    @Override
    public String playGame() {
        return "pubg启动!";
    }
}

第四步:调用

/**
 * @author wangpeng
 * @ClassName TestController
 * @description TODO
 * @date 2024/4/24 16:44
 */
@RestController
@RequestMapping("/test")
public class FuckController {



    @GetMapping("/pubg")
    @Anonymous
    public String playPubg(String game) {
        Pubg pubg = new Pubg();
        PlayGameContext playGameContext = new PlayGameContext(pubg);
        return  playGameContext.playGame();
    }

    @GetMapping("/lol")
    @Anonymous
    public String playLoL(String game) {
        Lol lol = new Lol();
        PlayGameContext playGameContext = new PlayGameContext(lol);
        return playGameContext.playGame();
    }
}

最后效果
在这里插入图片描述
在这里插入图片描述