设计模式-策略

定义

策略模式是一种非常常用且强大的行为型设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。简单来说,就是 “准备一组算法,并将每一个算法封装起来,使得它们可以互换”。

核心角色

策略接口
具体策略
上下文

  • 持有一个策略接口的引用。
  • 可以定义一个接口来让策略访问它的数据。
  • 负责将客户的请求委托给当前的策略对象执行。

策略接口和具体策略

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();
    }
}

测试结果

策略模式

posted @ 2025-09-10 16:19  南翔技校毕业后  阅读(8)  评论(0)    收藏  举报