设计模式-策略
定义
策略模式是一种非常常用且强大的行为型设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。简单来说,就是 “准备一组算法,并将每一个算法封装起来,使得它们可以互换”。
核心角色
策略接口
具体策略
上下文
- 持有一个策略接口的引用。
- 可以定义一个接口来让策略访问它的数据。
- 负责将客户的请求委托给当前的策略对象执行。
策略接口和具体策略
public interface StrategyInterface {
void test();
}
@Component
class StrategyInterfaceImpl1 implements StrategyInterface {
@Override
public void test() {
System.out.println("进入StrategyInterfaceImpl1");
}
}
@Component
class StrategyInterfaceImpl2 implements StrategyInterface {
@Override
public void test() {
System.out.println("进入StrategyInterfaceImpl2");
}
}
上下文【多变种】
@Component
@RequiredArgsConstructor
public class StrategyContext {
// Spring会自动将StrategyInterface的所有实现bean注入到这个Map中
// Key:bean的名称,Value:对应的策略实现bean
private final Map<String, StrategyInterface> strategyMap;
// 注入所有策略
private final List<StrategyInterface> strategies;
public void executeStrategy(String strategyType) {
StrategyInterface strategy = strategyMap.get(strategyType);
if (strategy == null) {
throw new BussinessException("未找到对应的策略: " + strategyType);
}
strategy.test();
}
public Set<String> getAvailableStrategies() {
return strategyMap.keySet();
}
}
测试
@RestController
@Api(tags = "测试策略模式")
@RequiredArgsConstructor
@RequestMapping("/strategy")
public class StrategyController {
private final StrategyContext strategyContext;
@GetMapping("/execute")
public Result<Boolean> executeStrategy(@RequestParam String type) {
strategyContext.executeStrategy(type);
return Result.success();
}
}
测试结果


浙公网安备 33010602011771号