java策略模式与Spring整合
来源:互联网 发布:自己通过淘宝客链接吗 编辑:程序博客网 时间:2024/06/05 18:32
java设计模式有很多种,其中策略模式算是比较常用的。在项目写完之后对部分代码进行了重构,其中就用到了策略模式(strategy),有了一点体会就记录一点点
需求:根据不同的渠道代码自动生成流水号,
需求很简单,我们常用的if else if …..else就能够把需求解决,但这样程序拓展性能不好,每添加一条就要修改不少的if else的源代码,所以这里就使用了策略模式。
第一步:先看策略接口
/** * 运用策略模式来自动生成袋号 * <p>Description: </p> * <p>Copyright: Copyright (c) 2017</p> * @author ll * @version V1.0 */public interface BoardNoService { /** * 根据不用的渠道代码生成不同的袋号,如果渠道代码为空,则按照coe指定的默认生成规则生成袋号 * 暂时只支持"ETRR"和"ETRN"两种渠道 * @param channelCode:渠道代码 * @return */ public String produceBoardNo(String channelCode);}
第二步:看策略接口的具体实现:在这里具体实现方法和业务逻辑就不贴上来了,不是重点。
第三步:创建一个策略持有类
public class BoardNoContext { private Map<String, BoardNoService> mapStractegy = new HashMap<String, BoardNoService>(); public Map<String, BoardNoService> getMapStractegy() { return mapStractegy; } public void setMapStractegy(Map<String, BoardNoService> mapStractegy) { this.mapStractegy = mapStractegy; } public String getNewBoardNo(String channelCode){ return this.mapStractegy.get(channelCode).produceBoardNo(channelCode); }}
这个策略持有类有个成员属性map,map的key就是对应的渠道代码,map对应的value就是策略接口;
这个类中的getNewBoardNo()方法就是map中取出第一步中的策略接口的具体实现类,并调用该类的produceBoardNo()方法生成一个流水号,然后返回。
使用的时候先注入:
再调用其方法:
然后再看看在applicationContext.xml中的配置:
<!-- 使用策略模式根据不同的渠道,按指定规则生成袋号 该bean是策略持有类 --> <bean id="bc" class="com.coe.exp.service.board.BoardNoContext"> <!-- mapStractegy是一个map,key是渠道代码,value是策略接口的实现--> <property name="mapStractegy"> <map> <entry key="ETRN" value-ref="etrn"></entry> <entry key="ETRR" value-ref="etrr"></entry> <entry key="COE" value-ref="coe"></entry> </map> </property> </bean> <bean id="etrn" class="com.coe.exp.service.board.impl.ETRNBoardNoServiceImpl"></bean> <bean id="etrr" class="com.coe.exp.service.board.impl.ETRRBoardNoServiceImpl"></bean> <bean id="coe" class="com.coe.exp.service.board.impl.COEBoardNoServiceImpl"></bean>
直接debug一次,看结果
以上就是策略模式在项目中的实际应用,希望能帮助读者
阅读全文
0 0
- java策略模式与Spring整合
- Spring与策略模式
- Spring与策略模式
- 浅谈Java与策略模式
- 黑马程序员--Spring与策略模式
- 与spring结合的策略模式
- 策略模式与Spring结合使用
- 《JAVA与模式》系列十六:策略模式
- Java与设计模式(06)--策略模式
- java与模式之策略模式
- 《JAVA与模式》之策略模式
- 《JAVA与模式》之策略模式(行为)
- 《JAVA与模式》之策略模式
- 《JAVA与模式》之策略模式
- 《JAVA与模式》之策略模式
- 《JAVA与模式》之策略模式
- Java与设计模式-策略模式
- 《JAVA与模式》之策略模式
- Python 字典(Dictionary)
- lua 时间函数os.time()和os.date()
- 今日头条(OCPC)广告激活数据对接-JAVA版
- 更换到Window系统后的一些使用习惯及配置记录
- linux下 关于Navicat连接不上数据库
- java策略模式与Spring整合
- Visual Studio 2013 编译器 快捷键大全
- nohup: redirecting stderr to stdout解决办法
- 如何编写mybatis动态sql语句
- QT表格的宽度自适应调整方法
- windows下搭建Kafka运行环境
- 响应式设计
- redis是什么?是缓存,其实是一个key/value数据库,是一个nosql数据库
- 数据结构中链式栈的c语言实现