java策略模式与Spring整合

java策略模式与Spring整合

2017年07月28日 17:19:53 苹果树上的你 阅读数:490 标签: java设计模式策略模式策略模式与Sprin 更多

个人分类: java设计模式

java设计模式有很多种,其中策略模式算是比较常用的。在项目写完之后对部分代码进行了重构,其中就用到了策略模式(strategy),有了一点体会就记录一点点

需求:根据不同的渠道代码自动生成流水号,

需求很简单,我们常用的if else if …..else就能够把需求解决,但这样程序拓展性能不好,每添加一条就要修改不少的if else的源代码,所以这里就使用了策略模式。 
第一步:先看策略接口

/**
 * 运用策略模式来自动生成袋号
 * 

Description:

*

Copyright: Copyright (c) 2017

* @author ll * @version V1.0 */ public interface BoardNoService { /** * 根据不用的渠道代码生成不同的袋号,如果渠道代码为空,则按照coe指定的默认生成规则生成袋号 * 暂时只支持"ETRR"和"ETRN"两种渠道 * @param channelCode:渠道代码 * @return */ public String produceBoardNo(String channelCode); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

第二步:看策略接口的具体实现:在这里具体实现方法和业务逻辑就不贴上来了,不是重点。 
java策略模式与Spring整合_第1张图片 
第三步:创建一个策略持有类

public class BoardNoContext {

    private Map mapStractegy = new HashMap();

    public Map getMapStractegy() {
        return mapStractegy;
    }
    public void setMapStractegy(Map mapStractegy) {
        this.mapStractegy = mapStractegy;
    }
    public String getNewBoardNo(String channelCode){
        return this.mapStractegy.get(channelCode).produceBoardNo(channelCode);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

这个策略持有类有个成员属性map,map的key就是对应的渠道代码,map对应的value就是策略接口; 
这个类中的getNewBoardNo()方法就是map中取出第一步中的策略接口的具体实现类,并调用该类的produceBoardNo()方法生成一个流水号,然后返回。 
使用的时候先注入: 
这里写图片描述 
再调用其方法: 
java策略模式与Spring整合_第2张图片

然后再看看在applicationContext.xml中的配置:


    
        
        
            
                
                
                
            
        
    
    
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

直接debug一次,看结果 
java策略模式与Spring整合_第3张图片
以上就是策略模式在项目中的实际应用,希望能帮助读者

 

你可能感兴趣的:(设计模式)