设计模式学习
- 设计模式学习
- 策略模式
- 策略模式适用于以下场景:
设计模式学习
策略模式
策略模式适用于以下场景:
- 对象有多种行为或算法,需要根据不同情况选择不同的算法。
- 系统中有多个类实现相同的接口或继承相同的抽象类,但具体实现不同。
- 需要在运行时动态地添加、删除或切换算法,而不影响客户端代码。
- 一个类有多种变形或状态,每个状态有不同的行为,需要根据状态动态改变对象的行为。
第一步:定义策略接口
/**
* 打游戏策略接口
* 策略接口定义行为
* @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();
}
}
最后效果