00 策略模式与if else

本文探讨了策略模式在业务逻辑代码结构中的应用,指出其核心思想是根据不同的key执行不同业务逻辑。尽管策略模式可能导致策略类增多和业务逻辑分散,但能提供更清晰的结构。对于简单的场景,文章提出使用Map和函数式接口来优化,减少类的定义。而对于复杂的业务逻辑,可以通过设计key生成规则和抽象业务逻辑服务来解决。总结了策略模式的优势在于提升复杂场景下的代码维护性,并提供了避免传统策略模式缺点的方法。
摘要由CSDN通过智能技术生成

原文:链接

1 策略模式是如何业务逻辑代码结构的?

首先,对于策略模式,其定义为一个类的行为或其算法可以在运行是更改。通俗来讲,就是运使程序时,给一个类的方法传不同的"key",此方法会执行不同的业务逻辑。由此我们最先想到的就是条件分支结构。那么既然条件分支结构就能够轻松实现,为什么会有策略模式的出现呢?策略模式又优化了什么呢?

策略模式的核心思想与条件分支结构如出一辙,根据不同的key找到不同的业务逻辑。但是实际上不仅仅如此,策略模式就是在代码结构上调整,用接口+实现类+分派逻辑提高代码结构的可维护性

总之,即使使用了策略模式,需要写的业务逻辑一样要写,到逻辑分派的时候,还是变相的条件分支结构。但是它的优点是抽象出了接口,将业务逻辑封装成了一个个的实现类,任意的替换。在复杂场景(即业务逻辑较多)时比直接使用条件分支结构更易维护

2 杀鸡焉用牛刀?条件分支结构场景需要用到策略模式?

有些开发场景中,我们的业务逻辑就那么几行,使用策略模式却需要一大堆类的定义,检查具体的业务逻辑还要去不同的类中,让人觉得很烦。所以策略模式就有以下缺点:
(1)策略类会增多;
(2)业务逻辑分散到各个实现类中,而且没有一个地方可以俯视整个业务逻辑。

因此,有人提出了以下方法来解决传统策略模式的缺点。
范例:优化传统策略模式
(1)为了简单演示这个思路,代码用String类型来模拟一个业务BO
|————getCheckResult()为传统做法;
|————getCheckResultSuper()则事先在Map中定义好了“判断条件”与“业务逻辑”的映射关系,详见代码注释。

/**
某个业务服务类
 */
public class BizService{
   

    /**
    传统的if else解决方法
    当每个业务逻辑有3、4行时,用传统的策略模式不值得,直接的if else又显得不易读
     */
    public String getCheckResult(String order){
   
        if("proof1".equals(order)){
   
            return "run service logic 1";
        } else if("proof2".equals(order)){
   
            return "run service logic 2";
        }else if("proof3".equals(order)){
   
            return "run service logic 2";
        }else if("proof4".equals(order)){
   
            return "run service logic 2";
        }else if("proof5".equals(order)){
   
            return "run service logic 2";
        }else if("proof6".equals(order)){
   
            return "run service logic 2";
        }else if("proof7".equals(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值