策略模式的简单实现

简介

手写了一个策略模式的简单实现,当项目中出现很多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

猜你喜欢

转载自blog.csdn.net/weixin_42704736/article/details/84197868