switch语句_多态方式 + 反射机制取代 switch 语句

点击上方“南客先生”,选择“设为星际”

做积极的人,而不是积极废人

大量的switch...case代码将会对整个系统的耦合度提升,然而在Java中采用多态和反射机制可以合理的降低此耦合度,提升代码的可扩展性和可维护性。

传统的switch...case实现方式:

/** -------------------- before -------------------- **/public static int getResult(int numberA, int numberB, String operate) {    int result = 0;    switch (operate) {        case "+":            result = numberA + numberB;            break;        case "-":            result = numberA - numberB;            break;        case "*":            result = numberA * numberB;            break;        case "/":            result = numberA / numberB;            break;        default:            break;    }    return result;}

看看使用了多态方式+反射机制调用方式:

/** -------------------- after (多态方式+反射机制)  -------------------- **/public static <T extends AbstractOperate> int getResult(int numberA, int numberB, Class<T> clz){    int result = 0;    try {        return clz.newInstance().compute(numberA, numberB);    }catch (InstantiationException | IllegalAccessException e){        e.printStackTrace();        return result;    }}

具体步骤:

创建一个基础的抽象类,来管理这些操作方式:

package org.jnyou.component.abstractbase;/** * 分类名称 * * @ClassName Operate * @Description: 抽象类提取操作方法 * @Author: jnyou * @create 2020/07/28 **/public abstract class AbstractOperate {    /**     * 计算的抽象方法     * 使用多态+反射机制实现代码的耦合度降低     * @param numberA     * @param numberB     * @return int     * @Author jnyou     * @Date 2020/7/28     */    public abstract int compute(int numberA, int numberB);}

具体的实现方式:

相加的具体实现:

package org.jnyou.component.abstractbase;/** * 分类名称 * * @ClassName AddOperate * @Description: 相加的具体实现 * @Author: jnyou * @create 2020/07/28 **/public class SumOperate extends AbstractOperate{    @Override    public int compute(int numberA, int numberB) {        return numberA + numberB;    }}

相减的具体实现

package org.jnyou.component.abstractbase;/** * 分类名称 * * @ClassName SubOperate * @Description: 相减的具体实现 * @Author: jnyou * @create 2020/07/28 **/public class SubOperate extends AbstractOperate {    @Override    public int compute(int numberA, int numberB) {        return numberA - numberB;    }}

相乘的具体实现:

package org.jnyou.component.abstractbase;/** * 分类名称 * * @ClassName MulOperate * @Description: 相乘的具体实现 * @Author: jnyou * @create 2020/07/28 **/public class MulOperate extends AbstractOperate {    @Override    public int compute(int numberA, int numberB) {        return numberA * numberB;    }}

相除的具体实现:

package org.jnyou.component.abstractbase;/** * 分类名称 * * @ClassName DivOperate * @Description: 相除的具体实现 * @Author: jnyou * @create 2020/07/28 **/public class DivOperate extends AbstractOperate {    @Override    public int compute(int numberA, int numberB) {        return numberA / numberB;    }}

虽然创建的类多了些,但是使用多态的方式和反射机制把对应操作的逻辑分离出来了,灵活的使代码变得低耦合,高可用。根据传入 class 参数,然后生成对应 Opearte处理类, 多态方式+反射机制,使得代码耦合度大大降低。如果在增加平方根,平方等其他的计算方式。我们只需要 新增一个 class 继承 AbstractOperate 即可,getResult 不用做任何修改。另外需要注意的是,不是所有switch语句都需要这样替换, 在面对简单的 switch语句,就不必要了, 避免过度设计的嫌疑。

End

如果看到这里,说明你喜欢这篇文章,点个赞,收藏一下吧!

(点击标题即可跳转)
  • 五分钟搞清楚mysql事务隔离级别

  • 导图梳理,深入了解Spring Boot

  • Spring Boot 注解大全

  • IDEA 使用快捷键大全

  • 搭建springboot工程,迎合微服务趋势

  • Spring Boot实战开发学习

  • 知识星球:厉害的人是怎么分析问题的?

欢迎入住南客先生公众号,海量编程学习资料等你学!

------------------------------------

  文章版权所有 | 转发请注明出处 

想了解更多的南客先生,可关注我哦:

长按下方图片

识别关注

南客先生

b7bd551fc3adf3c362c5ad5fe14ab5e1.gif

587a60524b33b70219d8220c012ce83d.png da74b75b58f2970d6b1dbcdc81e63ffb.png

   更多学习笔录,都在南客先生!

有趣的灵魂在等你

长按扫码可关注

286b804eb5d9d797447ff41d815f76f4.png

天才在左

魔鬼在右

?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值