点击上方“南客先生”,选择“设为星际”
做积极的人,而不是积极废人
大量的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实战开发学习
知识星球:厉害的人是怎么分析问题的?
欢迎入住南客先生公众号,海量编程学习资料等你学!
------------------------------------
文章版权所有 | 转发请注明出处
想了解更多的南客先生,可关注我哦:
长按下方图片
识别关注
南客先生
![587a60524b33b70219d8220c012ce83d.png](https://img-blog.csdnimg.cn/img_convert/587a60524b33b70219d8220c012ce83d.png)
![da74b75b58f2970d6b1dbcdc81e63ffb.png](https://img-blog.csdnimg.cn/img_convert/da74b75b58f2970d6b1dbcdc81e63ffb.png)
更多学习笔录,都在南客先生!
有趣的灵魂在等你长按扫码可关注
![286b804eb5d9d797447ff41d815f76f4.png](https://img-blog.csdnimg.cn/img_convert/286b804eb5d9d797447ff41d815f76f4.png)
天才在左
魔鬼在右
?