if和else if和else if的用法

2025-01-2219:04:57销售经验0

我曾在我的技术文章中采用枚举的方式消解了if-else的冗余,对这有兴趣的朋友可以参考我之前的分享:

《如何用枚举消除if/else? - 枚举的高阶应用》

而今,我尝试着以另一种方式来处理if-else的困扰。

背景

在软件开发过程中,我们常常会遇到需要使用if-else语句的情况。过多的if-else语句不仅不利于代码的可读性,还会增加代码的复杂度。我曾经在处理Sonar代码异味时遇到过这样的问题。

在之前的工作中,我遇到公司系统的代码中if-else泛滥的情况,这使代码显得不够优雅。为了更好地解释这个问题,我将简化业务逻辑。

假设有一个计算商品实际价格的方法,需要输入用户的级别和商品的原价,然后返回商品的真实价格。以下是该方法的基本实现:

这里的level代表用户级别,originalPrice则是商品的原价。如果用户是普通用户(normal),真实价格就是原价乘以1.0;如果是用户,真实价格则是原价乘以0.9;否则,就返回原价。

下面是简单的测试代码示例:

测试结果中的价格显示为:

使用设计模式解决if-else的弊端

经过思考,我决定采用设计模式来解决if-else的问题。

CalculateStrategy 接口

我们定义一个计算接口,包括获取用户等级和计算相应价格的方法。

NormalStrategy 和 VipStrategy 类的实现

然后我们分别为normal级别和vip级别创建实现类。

我们的真实价格计算代码如下:

我们创建了一个映射(map),其键存放用户级别level,值存放CalculateStrategy的对象实例。在系统启动时,IoC容器将为SaleService创建对象,这时map将存入所有实现了CalculateStrategy的对象。

测试代码示例

测试结果:

实际上,我在这里运用了设计模式中的策略模式。我将if-else中的算法提取出来,单独封装在类中。这样使算法独立于调用者,如果需要改变算法只需改变算法类,无需改变调用者。

是否还有其他设计模式被应用在上述代码中?请思考并回答。

  • 版权说明:
  • 本文内容由互联网用户自发贡献,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 295052769@qq.com 举报,一经查实,本站将立刻删除。