策略模式的簡單實現
阿新 • • 發佈:2018-11-19
簡介
手寫了一個策略模式的簡單實現,當專案中出現很多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;
核心列舉類 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";
}
}
如果文章對你有幫助歡迎轉發朋友圈、關注我的微信公眾號,也歡迎你的讚賞!!!