策略模式的简单实现

简介

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值