Springboot中实现策略模式+工厂模式的方法
策略模式和工厂模式相信大家都比较熟悉,但是大家有没有在springboot中实现策略和工厂模式?
具体策略模式和工厂模式的UML我就不给出来了,使用这个这两个模式主要是防止程序中出现大量的IF ELSE IF ELSE....。接下来咱们直接实现,项目结构图:
工厂类FactoryStrategy负责创建策略的工厂,代码比较简单,比较关键的一点是AutoWired一个Map<String, Strategy> 这个会在初始化的时候将所有的Strategy自动加载到Map中,是不是很方便。使用concurrentHashMap是防止多线程操作的时候出现问题。同时还要注意@Service注解。
package com.hqs.pattern.factory; import com.hqs.pattern.strategy.Strategy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @author huangqingshi * @Date 2019-01-31 */ @Service public class FactoryForStrategy { @Autowired Map<String, Strategy> strategys = new ConcurrentHashMap<>(3); public Strategy getStrategy(String component) throws Exception{ Strategy strategy = strategys.get(component); if(strategy == null) { throw new RuntimeException("no strategy defined"); } return strategy; } }
接下来就是Strategy接口,就一个doOperation方法。
package com.hqs.pattern.strategy; /** * @author huangqingshi * @Date 2019-01-31 */ public interface Strategy { String doOperation(); }
定义接口的实现,我定义了三个, 都类似,这里我就放出一个来吧。Component里边的one是指定其名字,这个会作为key放到Map strategys里边。
package com.hqs.pattern.strategy.impl; import com.hqs.pattern.strategy.Strategy; import org.springframework.stereotype.Component; /** * @author huangqingshi * @Date 2019-01-31 */ @Component("one") public class StrategyOne implements Strategy { @Override public String doOperation() { return "one"; } }
好了,写一个Controller类,用于进行测试,当然我还是使用swagger,使用swagger的时候有个细节,就是注意生产上一定不能打开,否则是个非常可怕的事情。
package com.hqs.pattern.controller; import com.hqs.pattern.factory.FactoryForStrategy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; /** * @author huangqingshi * @Date 2019-01-31 */ @Controller public class StrategyController { @Autowired FactoryForStrategy factoryForStrategy; @PostMapping("/strategy") @ResponseBody public String strategy(@RequestParam("key") String key) { String result; try { result = factoryForStrategy.getStrategy(key).doOperation(); } catch (Exception e) { result = e.getMessage(); } return result; } }
打开swagger进行测试,输入one,返回one。输入four,返回no strategy defined。后续如果有新策略的话,直接实现即可。
好了,这块就这么完成了,你get到了吗?
代码地址:https://github.com/stonehqs/pattern.git
到此这篇关于Springboot中实现策略模式+工厂模式的文章就介绍到这了,更多相关Springboot策略模式工厂模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Springboot 1.5.7整合Kafka-client代码示例
这篇文章主要介绍了Springboot 1.5.7整合Kafka-client代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-10-10SpringBoot使用@Autowired为多实现的接口注入依赖
这篇文章主要介绍了SpringBoot使用@Autowired为多实现的接口注入依赖,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11深度deepin安装以及jdk、tomcat、Nginx安装教程
这篇文章主要给大家介绍了关于深度deepin安装以及jdk、tomcat、Nginx安装的相关资料,按照文中介绍的方法可以轻松的实现安装,对大家的工作具有一定的参考借鉴价值,需要的朋友可以参考下2024-01-01myatisplus的saveOrUpdate的提交总是update问题
这篇文章主要介绍了myatisplus的saveOrUpdate的提交总是update问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-11-11
最新评论