设计模式学习
策略模式
策略模式适用于以下场景:
- 对象有多种行为或算法,需要根据不同情况选择不同的算法。
- 系统中有多个类实现相同的接口或继承相同的抽象类,但具体实现不同。
- 需要在运行时动态地添加、删除或切换算法,而不影响客户端代码。
- 一个类有多种变形或状态,每个状态有不同的行为,需要根据状态动态改变对象的行为。
第一步:定义策略接口
/*** 打游戏策略接口* 策略接口定义行为* @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 {@Overridepublic String playGame() {return "LoL启动!";}
}
/*** @author wangpeng* @ClassName Pubg* @description TODO* @date 2024/4/24 16:43*/public class Pubg implements PlayGameStategy {@Overridepublic String playGame() {return "pubg启动!";}
}
第四步:调用
/*** @author wangpeng* @ClassName TestController* @description TODO* @date 2024/4/24 16:44*/
@RestController
@RequestMapping("/test")
public class FuckController {@GetMapping("/pubg")@Anonymouspublic String playPubg(String game) {Pubg pubg = new Pubg();PlayGameContext playGameContext = new PlayGameContext(pubg);return playGameContext.playGame();}@GetMapping("/lol")@Anonymouspublic String playLoL(String game) {Lol lol = new Lol();PlayGameContext playGameContext = new PlayGameContext(lol);return playGameContext.playGame();}
}
最后效果