美文网首页
优化if-else

优化if-else

作者: 追梦小蜗牛 | 来源:发表于2019-12-05 20:05 被阅读0次
greyscale-photo-of-birds-3283090.jpg

简介:

从一开始学编程的时候,就开始接触到if-else,也是最简单的一个条件分支,包括到现在,依然很重要,在代码里面出现的频率很高,一些底层的框架源码也随处可以看到它的影子,可见其影响其深远。今天聊的优化,不是要否定if-else,而是在某些场景下,有更好的方案可以替换它。记录在博客里面,没事的时候,看一看,体会其中的编程思想。

涉及到的模式:

1、策略模式
2、工厂模式
3、spring的一些特性

类图:

策略模式类图.png
简单工厂模式类图.png

优化思路:

一个if-else出现在代码里面,合情合理,但是当多个if-else出现在一个业务里面,代码看起来就不会那么优雅,并且可扩展性也很低,如果增加一个分支,只有在后面继续添加,这样会越来越长......那么我们就要想着如何可以利用学到的知识优化它,让它变得更简洁。
每一个业务分支都是一块独立的处理逻辑,和其他的if-else没有多大关系,所以都可以独立的抽取出来,放在一个专有的类里面。为了响应更多的利用多态和面向接口编程的口号,这些专有类需要实现同一个接口,实现同一个方法;
比如:在去银行办理业务的时候,会分为普通民众、会员、超级会员,不同的等级,待遇会不一样,如果抽象成代码的话,代码如下:

    public void handleBusinessOfBank(String type) {
        if ("normal".equals(type)) {
            System.out.println("取号,排队,办理业务,人多,服务态度不好");
        }else if ("vip".equals(type)) {
            System.out.println("到会员窗口去办理业务,人少,服务态度好");
        } else if("superVip".equals(type)) {
            System.out.println("到超级会员房间办理业务,一对一服务");
        } else {
            System.out.println("......");
        }
    }

这三种类型的业务互相之间的联系基本上没有,可以单独的抽取出来,放到一个类里面,同时抽线出一个接口,三个类型的代码:

public class Normal implements Member, InitializingBean {

    @Override
    public void handleBusiness() {
        System.out.println("取号,排队,办理业务,人多,服务态度不好");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        MemberFactory.memberMap.put("normal",this);
    }
}

public class Vip implements Member, InitializingBean {

    @Override
    public void handleBusiness() {
        System.out.println("到会员窗口去办理业务,人少,服务态度好");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        MemberFactory.memberMap.put("vip",this);
    }
}

public class SuperVip implements Member , InitializingBean {

    @Override
    public void handleBusiness() {
        System.out.println("到超级会员房间办理业务,一对一服务");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        MemberFactory.memberMap.put("superVip",this);
    }
}

工厂类:

public class MemberFactory {

    static Map<String, Member> memberMap = new ConcurrentHashMap<>();//保证线程安全

    public static Member getConcreteBankBusiness(String type) {
        return memberMap.get(type);
    }

}

调用类:

    public void handleBusinessOfBank(String type) {
        Member member = MemberFactory.memberMap.get(type);
        member.handleBusiness();
    }

总结:

上面这个例子自我感觉很经典,完全的可以体现出java的设计模式+spring的一些特性+好的编程思想可以勾勒出够简洁、可扩展、思路清晰的代码。在写代码的时候,真的需要多问几个为什么,为什么这么写?这么写有什么优势么?有没有更好的方法去实现?缺点是什么?可以优化么?别人都是怎么写的......如果以后发现了更好的实现方式,会继续更新的,没有最好,只有更好......

相关文章

  • 优化if-else

    简介: 从一开始学编程的时候,就开始接触到if-else,也是最简单的一个条件分支,包括到现在,依然很重要,在代码...

  • Java if-else 优化

    核心主旨: 1.根据代码的复杂程度,重构和模式也会带赖开销 2.解耦 3.过滤器、责任链等等也是为了解耦if--e...

  • if-else优化问题

    在项目开发中,我们总是不可避免做大量的判断,很多时候,我们的第一反应就是使用if-else进行判断。但是,过多的i...

  • 使用likely和unlikely 优化程序性能

    作用 likely unlikely是为编译器提供对分支优化的提示,基本用于if-else的分支优化场景。if-e...

  • 减少该死的 if else 嵌套

    优化if嵌套[https://www.jianshu.com/p/57c065b124c4] if-else重构高...

  • PHP IF-ELSE代码优化

    IF - ELSE structure's optimize PROCESS: 以 else 的情况作为错误开头,...

  • 优化过多的if-else

    开发中使用到if-else是再正常不过的了,如果需要判断的条件比较少,使用少量的if-else是最简单不过的,但是...

  • 鹅厂实习| 周记(四)

    以下是本周的知识清单: TypedArray if-else优化 注解替代枚举 一点小感悟 1.TypedArra...

  • iOS表驱动法去除if-else简化逻辑

    今天介绍用表驱动法优化代码中的逻辑 去除复杂繁多的if-else判断 WMZStrategy(demo) 所谓表...

  • [解锁新姿势] 回想起被 `if-else` 支配的恐惧,我们要

    前言 [解锁新姿势] 兄dei,你代码需要优化了 在之前文章说到,简单 if-else,可以使用 卫语句 进行...

网友评论

      本文标题:优化if-else

      本文链接:https://www.haomeiwen.com/subject/ltolgctx.html