1. 程式人生 > >java策略模式與Spring整合

java策略模式與Spring整合

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一次,看結果
這裡寫圖片描述
以上就是策略模式在專案中的實際應用,希望能幫助讀者