模板模式在实际工作中的应用

       工作中看到过各种if else语句在代码中堆积,其中一些完全可以通过设计模式来处理,让代码更加清晰干净清爽并易扩展。今天分享一下通过模板模式优化该问题方法。

       之前工作中遇到一段前辈们留下的代码,业务需求是程序通过消费MQ来加工数据, 这些MQ主题不同, 对应的业务逻辑不同,但消息体结构相同,所以在同一个方法中加工处理。其中,每个主题的消息体中有不同的状态属性,类似topic1:{"status":1, "name":"发快递"},topic2:{"status":2,"name":"检测快递"},topic3:{"status":3,"name":"收快递"}。在项目代码中,自然看到了一堆if else,通过消息体中的status值来判断消息体来自哪个消息,并执行对应的处理逻辑。代码不仅冗长,而且不易扩展,如果此时要增加一个状态,就要增加一个else分支处理, 就意味着业务代码需要变动。(PS:真实需求比较复杂,这里只是简单介绍一下类似的场景)。

if(status == 1){
    doSend(); 
}else if(status == 2){
    doCheck(); 
}else if(status == 3){
    doPickUp(); 
}

    优化开始, 通过模板模式优化上述的if else语句

    首先定义一个处理各种快递状态的抽象类ExpressProcess

public abstract class ExpressProcess{

    public abstract ExpressData doSomething();

}

然后, 分别定义各个快递状态的处理类,这些处理类继承ExpressProcess,并各自重写doSomething()方法,执行各自的业务逻辑

public class SendExpress extends ExpressProcess {

    public ExpressData doSomething() {
        System.out.println("发快递");
        return new ExpressData();
    }
}


public class PickUpExpress extends ExpressProcess {

    public ExpressData doSomething() {
        System.out.println("收快递");
        return new ExpressData();
    }
}

写一个测试类,测试一下

public class TestDemo {

    private static Map<String,ExpressProcess> expressProcess = new HashMap<String,ExpressProcess>();

    static {
        //处理类注册
        expressProcess.put("send", new SendExpress());
        expressProcess.put("pickkup", new PickUpExpress());
    }

    public static void main(String[] args) {
        //状态不同,处理类及结果不同
        String status = "send";
        ExpressData data = expressProcess.get(status).doSomething();
    }
}

可以看到,map根据状态找到对应的处理类,并执行方法处理对应业务逻辑。每次的处理结果随着状态不同而不同。如果有新的状态增加,只需要添加一个处理类并在map中注册即可,原业务代码无需改动也避免了大量if else语句。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值