使用@Autowired对List自动注入 & 策略模式

利用 策略模式 来 优化 你的复杂代码




实现策略模式分为两个重要的步骤:
第一:传入选择某种具体策略的标识;
第二:将所有的策略单独封装
第三:根据传入的标识,选择具体策略

在spring中, 我们可以将所有的策略实现类交给spring来管理;


public interface StrategyService {    //模式(标识)    String getZfptms();    //具体的策略算法(业务处理)    String parse(String path);}
@Servicepublic class AAStrategyService implements StrategyService{    private static final String zfptms = "aaaaa";    //这里指定与当前策略相匹配的标识;    @Override    public String getZfptms() {        return zfptms;    }    @Override    public String parse(String path) {        //具体业务处理        System.out.println("a模式================");        return null;    }}@Servicepublic class BBStrategyService implements StrategyService{    private static final String zfptms = "bbbbb";    //这里指定与当前策略相匹配的标识;    @Override    public String getZfptms() {        return zfptms;    }    @Override    public String parse(String path) {        //具体业务处理        System.out.println("bbbbb模式================");        return null;    }}



@Componentpublic class StrategyFactory implements InitializingBean {    //将之前所有的策略实现类注入;    @Autowired    List zfptStrategyServices;    private static Map zfptStrategyServiceMap = new HashMap<>();    //spring bean初始化时收集所有策略实现类的策略标识,组成策略标识->策略实现的映射    @Override    public void afterPropertiesSet() {        zfptStrategyServices.stream().forEach(zfptStrategyService -> {            zfptStrategyServiceMap.put(zfptStrategyService.getZfptms(), zfptStrategyService);        });        System.out.println("策略组装完成-----" + zfptStrategyServiceMap);    }    public static StrategyService getZfptService(String zfptms){        return zfptStrategyServiceMap.get(zfptms);    }}
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章