spring版本策略模式(超實用)

策略模式:顧名思義,按照不同的情況選擇對應(yīng)的對策略的模式

設(shè)計,策略對應(yīng) code枚舉,決策謀略對應(yīng)不同的類的執(zhí)行方法,往下看

直接上代碼

策略處理器枚舉

/**
 * 描述: 策略處理器枚舉 </br>
 * 時間: 2022-01-15 14:03  </br>
 * 作者:it學(xué)習(xí)道場
 */
public enum  HandlerEnum {
    first(1,"第一個處理器"),
    second(2,"第二個處理器"),
    third(3,"第三個處理器")
    ;
    private int code;
    private String desc;

    HandlerEnum(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "HandlerEnum{" +
                "code=" + code +
                ", desc='" + desc + '\'' +
                '}';
    }
}
策略模式頂級處理器抽象
/**
 * 描述: 策略模式頂級處理器抽象 </br>
 * 時間: 2022-01-15 14:01  </br>
 * 作者:it學(xué)習(xí)道場
 */
public interface Handler {
    /**
     * 執(zhí)行業(yè)務(wù)邏輯抽象方法
     * @return
     */
    boolean handle();

    /**
     * 獲取code方法
     * @return
     */
    int getCode();
}
第一個處理器
import org.springframework.stereotype.Component;

/**
 * 描述: 第一個處理器 </br>
 * 時間: 2022-01-15 14:13  </br>
 * 作者:it學(xué)習(xí)道場
 */
@Component
public class FirstHandler implements Handler {
    private static final int code = HandlerEnum.first.getCode();
    @Override
    public boolean handle() {
        System.out.println(HandlerEnum.first.getDesc() + "開始執(zhí)行業(yè)務(wù)......");
        return true;
    }

    @Override
    public int getCode() {
        return code;
    }
}
第二個處理器






import org.springframework.stereotype.Component;

/**
 * 描述: 第二個處理器 </br>
 * 時間: 2022-01-15 14:13  </br>
 * 作者:it學(xué)習(xí)道場
 */
@Component
public class SecondHandler implements Handler {
    private static final int code = HandlerEnum.second.getCode();
    @Override
    public boolean handle() {
        System.out.println(HandlerEnum.second.getDesc() + "開始執(zhí)行業(yè)務(wù)......");
        return true;
    }

    @Override
    public int getCode() {
        return code;
    }
}
第三個處理器
import org.springframework.stereotype.Component;

/**
 * 描述: 第三個處理器 </br>
 * 時間: 2022-01-15 14:13  </br>
 * 作者:it學(xué)習(xí)道場
 */
@Component
public class ThirdHandler implements Handler {
    private static final int code = HandlerEnum.third.getCode();
    @Override
    public boolean handle() {
        System.out.println(HandlerEnum.third.getDesc() + "開始執(zhí)行業(yè)務(wù)......");
        return true;
    }

    @Override
    public int getCode() {
        return code;
    }
}
策略工廠
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 描述: 策略工廠 </br>
 * 時間: 2022-01-15 14:17  </br>
 * 作者:it學(xué)習(xí)道場
 */
@Component
public class StrategyFactory {
    @Autowired
    private Map<String, Handler> handlerBeanMap = new ConcurrentHashMap<>();

    /**
     * 根據(jù)code獲取對應(yīng)處理器
     * @param code handler的code碼
     * @return Handler - 處理器
     */
    public Handler getHandler(int code){
        for (String beanName : handlerBeanMap.keySet()) {
            Handler handler = handlerBeanMap.get(beanName);
            if (handler.getCode() == code){
                return handler;
            }
        }
        return null;
    }
}
測試
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 描述: 工廠處理器測試 </br>
 * 時間: 2022-01-15 14:24  </br>
 * 作者:it學(xué)習(xí)道場
 */
public class StrategyTest {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.register(StrategyFactory.class,FirstHandler.class,SecondHandler.class,ThirdHandler.class);
        context.refresh();
        StrategyFactory bean = context.getBean(StrategyFactory.class);
        //1-對應(yīng)第一個處理器,2-對應(yīng)第二個處理器,3-對應(yīng)第三個處理器
     Handler handler = bean.getHandler(HandlerEnum.first.getCode());
        handler.handle();
    }
}
自己來測試下吧











作者:IT學(xué)習(xí)道場

歡迎關(guān)注微信公眾號 : IT學(xué)習(xí)道場