策略模式代替if else 【原创】

更多靠谱软件破解教程,戳这里!!(破解目录汇总)

哈喽,大家好,我是程小南,导航搬砖工一名,致力于为大家淘出更多有趣好使的生产力工具!

小南最近接手了一个新项目。

发现了一有趣的事情。

同时,也给小南上了一课。

程序还得会玩啊!!!

由于具体业务不方便透露。

小南就从中摘抄并整编成下面内容。

if-else

 if ("群体A".equals(type)) {
     //优惠方式1优惠逻辑
 } else if ("群体B".equals(type)) {
     //优惠方式3优惠逻辑
 } else if ("群体C".equals(type)) {
     //优惠方式3优惠逻辑
 } else {
     logger.info("找不到对应的优惠类型");
 }

switch

 switch (type) {
     case "群体A":
         //优惠方式1优惠逻辑
         break;
     case "群体B":
         //优惠方式2优惠逻辑
         break;
     case "群体C":
         //优惠方式3优惠逻辑
         break;
     default:
         logger.info("找不到对应的优惠类型");
         break;
 }

以上两种是在开发过程中比较常用的,适用于代码量小,逻辑简单。一旦代码长度偏长,逻辑复杂时,闭眼都能想象,满篇幅的if-else。一个是影响了可读性,另一个改起来也特别费劲,生怕动一某个变量影响整个代码块的逻辑。可维护性低。

策略模式

策略模式在这里简单理解就是把 if语句里面的逻辑或switch语句中case里面的逻辑抽取出来,把它放到一个策略类中。这样每个判断都改成了一个类,需要修改的时候只要改对应的类,不用担心影响到其它的类的实现逻辑,方便维护。对于简单的逻辑其实没必要搞得这么复杂,if-else几行代码就能解决。可以看出一旦策略类多了,也很麻烦。

函数式接口

函数式接口相对而言就比较折中,既不要担心if-else中,改动造成其它逻辑影响,代码也不集中在一起,也会想策略模式中存在很多类文件。比较麻烦的是用了lambda表达式,jdk版本会影响,团队中也可能有些小伙伴不会。

在实际使用的过程中在函数式方法中业务逻辑复杂时,也就是if语句块业务复杂。常常把这部分抽取除独立的业务Service。也常配合好策略类一起用。

总之,以上的每个方法行,都有一定的优缺点,if-else都能让人玩出花来,程序员要努力!


小白学堂 » 策略模式代替if else 【原创】

就聊挣钱,一个带着你做副业的社群。

立即查看 了解详情