1. 程式人生 > >策略模式的簡單實現

策略模式的簡單實現

簡介

手寫了一個策略模式的簡單實現,當專案中出現很多if分支且每個分支處理的事情大致相同時可以考慮使用。

完整程式碼地址https://github.com/duzhuo/design-pattern/tree/master/design-pattern-strategy

其中列舉類的match寫法參考了xxl-job的com.xxl.job.admin.core.enums.ExecutorFailStrategyEnum。

程式執行方法

啟動springBoot專案

瀏覽器執行http://localhost:7777/01,走OrderService;

瀏覽器執行http://localhost:7777/02,走TransformService;

image-20181118135156195

image-20181118135219934

image-20181118135243087

核心列舉類 BusinessTypeEnum


public enum BusinessTypeEnum {

    BUSINESS_ORDER("01", "訂單", "orderService"),
    BUSINESS_TRANS("02", "運單", "transformService");

    private String businessCode;
    private String businessName;
    private String serviceName;

    BusinessTypeEnum(String businessCode,
String businessName, String serviceName) { this.businessCode = businessCode; this.businessName = businessName; this.serviceName = serviceName; } public String getBusinessCode() { return businessCode; } public String getServiceName() { return
serviceName; } public static String match(String businessCode) { if (businessCode == null) return null; for (BusinessTypeEnum item : BusinessTypeEnum.values()) { if (item.getBusinessCode().equals(businessCode)) { return item.getServiceName(); } } return null; } }

執行器類BusinessExecutor

@Service
public class BusinessExecutor implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    public String run(String businessCode) {
        String serviceName = BusinessTypeEnum.match(businessCode);

        if (serviceName == null) {
            return "not match this business!!";
        }

        BusinessService businessService = (BusinessService) applicationContext.getBean(serviceName);
        return businessService.dealBusiness();
    }
}

業務介面與實現

public interface BusinessService {

    String dealBusiness();
}


@Service
public class OrderService implements BusinessService {
    @Override
    public String dealBusiness() {
        return "this is OrderService";
    }
}

@Service
public class TransformService implements BusinessService {
    @Override
    public String dealBusiness() {
        return "this is TransformService";
    }
}

如果文章對你有幫助歡迎轉發朋友圈、關注我的微信公眾號,也歡迎你的讚賞!!!

公眾號二維碼-0.8m