代码优化之抽象类的引入

一、场景

     场景:有个给不同类型的数据打上标签的功能。不同数据类型生成的标签规则不一样。


二、编码实现

 1、首先定义一个抽象类(统一需要实现的方法)

/**
 * FileName: AbstractMakeTagHandler
 * Author: pengyd
 * Date: 2020/3/13
 * function: 
 */
public abstract class AbstractMakeTagHandler {

    /**
     *  生成标签
     *
     * @param request    ProcessApproveRequest
     * @param info       SubmitInfo
     * @param objectType 数据类型
     */
    public abstract void makeTag(ProcessApproveRequest request, SubmitInfo info, String objectType);
}

2、工厂类(目的是用来映射不同的实现类)
 

/**
 * FileName: MateTagFactory
 * Author: pengyd
 * Date: 2020/3/13
 * function: 对应标签映射类
 */
public class MateTagFactory {

    private static Map<String, String> mapping = Maps.newHashMap();

    static {
        mapping.put(TemplateTypeEnum.CONTRACT.getDesc(), MakeTagHandlerTag.contract);
        mapping.put(TemplateTypeEnum.SEAL.getDesc(), MakeTagHandlerTag.seal);
        mapping.put(TemplateTypeEnum.STANDARD.getDesc(), MakeTagHandlerTag.standard);
        mapping.put(TemplateTypeEnum.INVOICE.getDesc(), MakeTagHandlerTag.invoice);
    }

    public static AbstractMakeTagHandler getHandler(String objectType) {
        String tag = mapping.get(objectType);
        Assert.isNotNull(tag, ResultCode.MAKETAG_HANDLER_NOT_MAPPING);
        AbstractMakeTagHandler makeTagHandler = SpringContextUtil.getBean(tag, AbstractMakeTagHandler.class);
        Assert.isNotNull(makeTagHandler, ResultCode.MAKETAG_HANDLER_NOT_UNREGISTERED);
        return makeTagHandler;
    }
}

3、Bean名称定义
 

/**
 * FileName: MakeTagHandlerTag
 * Author: pengyd
 * Date: 2020/3/13
 * function: 标签相关 - Bean名称
 */
public interface MakeTagHandlerTag {

    String contract = "makeTag_contract";

    String seal = "makeTag_seal";

    String invoice = "makeTag_invoice";

    String standard = "makeTag_standard";

}

4、具体逻辑实现类

/**
 * FileName: ContractMakeTagHandler
 * Author: pengyd
 * Date: 2020/3/13
 * function: 处理类
 */
@Component(MakeTagHandlerTag.contract)
public class ContractMakeTagHandler extends AbstractMakeTagHandler {

    @Autowired
    private DataTagHandler dataTagHandler;

    @Override
    public void makeTag(ProcessApproveRequest request, SubmitInfo info, String objectType) {
       //TODO 具体的业务逻辑内容
    }
}

三、使用(这里的objectType就是用于MateTagFactory中映射好的关系,拿到对应的处理类)



            MateTagFactory.getHandler(objectType).makeTag(processApproveRequest, info, objectType);

四、优点

 后面如果需要新增类似功能,只需要新增一个具体的Handler就行。易扩展,可读性高。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值