spring boot 工厂+策略模式实现APP版本控制

宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述spring boot 工厂+策略模式实现APP版本控制相关的知识,希望能为你提供帮助。
目前我们在用的技术方案是策略模式,在APP发包的时候,每次都是需要在当前版本迭代往上加,然而每次发包的内容并非覆盖所有功能的,有些功能是复用兼容旧版本。
因此是从class的name+版本好进行判断处理业务逻辑。比如8.0的版本是初版,那么8.0.1++往上叠加,若判断该版本是有新的功能迭代,那么就直接引用新版本的功能,若无,则向下兼容旧版本,比如我的版本出到了8.0.2,8.0.2是不需要加功能的,那么8.0.1已经出了一个版本迭代功能,比8.0.0的版本高,那么是优先拿8.0.1的功能的。
从而代码量是比工厂策略模式复杂的。因此综合进行升级了一波。
工厂类:

/** * @author jimw * @date 2020-1-21 * 工厂策略模式 */ @Service @Log4j2 public class FactoryForStrategy {@Autowired Map< String, Strategy> strategys = new ConcurrentHashMap< > (3); public Strategy getStrategy(String version) throws Exception { Strategy strategy = strategys.get(version); if (strategy == null) { strategy = strategyGet(version); if (strategy != null) { return strategy; } throw new RuntimeException("no strategy defined"); } return strategy; }public Strategy strategyGet(String version) { List< Map.Entry< String, Strategy> > list = new ArrayList(strategys.entrySet()); Comparator< Map.Entry< String, Strategy> > ageComparator = Comparator.comparing(Map.Entry::getKey); list.sort(ageComparator.reversed()); for (Map.Entry< String, Strategy> strategyEntry : list) { //比当前版本高 则跳过 if (version.compareTo(strategyEntry.getKey()) > 0) { if (strategys.get(strategyEntry.getKey()) == null) { return strategyGet(strategyEntry.getKey()); } return strategys.get(strategyEntry.getKey()); }} return null; } }

/** * * @author jimw * @date 2020-1-21 * 实现接口方法 */ public interface Strategy { String doOperation(); }

实现:
/** * * @author jimw * @date 2020-1-21 * 实现 */ @Component("8.0.0") public class StrategyOne implements Strategy { @Override public String doOperation() { return "8.0.0"; } }/** * * @author jimw * @date 2020-1-21 * 版本区分实现 */ @Component("8.0.3") public class StrategyThree extends StrategyTwo {@Override public String doOperation() { return "8.0.3"; } } /** * * @author jimw * @date 2020-1-21 * 版本区分实现 */ @Component("8.0.2") public class StrategyTwo extends StrategyOne { //不做动作也可以,该类不写也可以}

 
demo:
/** * @author jimw * @date 2020-1-21 * demo */ @RestController public class StrategyController {@Autowired FactoryForStrategy factoryForStrategy; @PostMapping("/strategyTest") @ResponseBody public String strategy(@RequestParam("version") String version) { String result; try { result = factoryForStrategy.getStrategy(version).doOperation(); } catch (Exception e) { result = e.getMessage(); } return result; } }

 
结果:
如果是比最初的版本低,则报错
spring boot 工厂+策略模式实现APP版本控制

文章图片

 
  正常的结果如下:
spring boot 工厂+策略模式实现APP版本控制

文章图片

 
 
spring boot 工厂+策略模式实现APP版本控制

文章图片

 
 
spring boot 工厂+策略模式实现APP版本控制

文章图片

 
【spring boot 工厂+策略模式实现APP版本控制】 
spring boot 工厂+策略模式实现APP版本控制

文章图片

 
 
 
 
 

    推荐阅读