三种方式,教你优雅的替换if-else语句!_程序员的成长之路的博客-程序员信息网

技术标签: jvm  面试  aop  微软  设计模式  

程序员的成长之路

互联网/程序员/技术/资料共享 

关注

阅读本文大概需要 2.8 分钟。

来自:love1024.blog.csdn.net/article/details/104955363

场景

日常开发,if-else语句写的不少吧??

当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!

本文将介绍三板斧手段:

  • 优先判断条件,条件不满足的,逻辑及时中断返回;

  • 融入策略模式;

  • 策略模式+工厂+单例模式,锦上添花;

接下来先附上一段很久以前自己写的业务代码,核心逻辑就是在支付回调中根据用户购买的价格包赋予用户对应的权益(VIP视频会员天数+抽奖机会次数)。

我的天,太多if-else了……(看不清楚可以点击图片放大)

1.优先判断条件,不满足及时中断

这点非常容易理解,就是说在业务逻辑里面,先把不符合条件的给先过滤掉,而不是层层嵌套if-else判断,结合代码图看一下:

2.策略模式改造

先用策略模式替换掉文章开头讲到的,用户充值后根据价格包(付的多少钱)给用户增加VIP天数及抽检机会次数的逻辑,我这里就简化成"根据-价格包区分给用户增加不同的体育会员视频VIP天数"这个动作来讲解:

表面上看,代码稍微优雅了点,但是还是没和if-else彻底说拜拜,且recharge()充值方法可单独拎出来,只需要根据priceCode实例化不同的策略对象即可:

3.策略模式+工厂+单例模式,锦上添花

接下来使用"工厂类+单例"来给代码加点料:

<END>

推荐阅读:

在 Win11 上打开 C 盘后:界面全变了

用 Redis 搞定游戏中的实时排行榜,附源码!

最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点个「在看」,点击上方小卡片,进入公众号后回复「面试题」领取,更多内容陆续奉上。

朕已阅 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42914528/article/details/118917893

智能推荐

顺序储存结构表(sqlist)_barcly1219的博客-程序员信息网_sqlist

一个刚刚入门的菜鸟码农,希望各位大咖能多多指教!以后尽量发图片。在csdn敲代码真累。

阿里云部署记录_ation_work的博客-程序员信息网

1、配置Java环境a.运行解压命令:tar -xzf /home/jdk-8u181-linux-x64.tar.gz -C /usr/java/jdkb.配置环境变量(或者直接打开etc目录下的profile文件):vi /etc/profile在文件末尾处添加以下内容并保存:1 #set java environment 2 export JAVA_HOME=/usr/java/jdk/jdk1.8.0_1813 export JRE_HOME=/usr/java/jdk/jd

Lower Power with CPF(一)_ahr7882的博客-程序员信息网

CPF(Common Power Format):cadence推出的一种在设计中描述低功耗设计的文件。完全按Tcl的语言格式来定义。CPF文件在整个前端后端的过程中,需要的部分不一样,所以CPF文件可以随着流程一步步的更新。一个CPF文件可以分为两部分内容:工艺相关的信息(technology-related)和设计相关的信息(design-related)。CPF要求顶层...

解决@JsonProperty不生效的问题_斗破大陆wawa的博客-程序员信息网[email protected]不生效大小写

最近因为要使用json对象,涉及到大写问题,@JsonProperty就能解决这个问题@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty(“name”)。package io.terminus.test.web.model;import com.fasterxml.jackson.an...

Linux 驱动相关文件系统_third_eye的博客-程序员信息网

<br />1. /dev 设备文件目录,存放所有系统中device(设备)的相关信息。<br />    /dev/snd:声卡设备<br />2. /etc 系统配置文件<br />3. /opt 表示可选择,自定义软件安装的地方<br />4. /proc 操作系统运行时,进程相关信息,由系统动态生成。<br />    /proc/ioports:可以查看I/O端口使用情况。<br />    /proc/modules:系统加载的模块。<br />5. /sys Linux 2.6内核支持的sys

Are you a qualified Windows programmer?_BIGDOG的博客-程序员信息网

2006年8月底,偶然用了360安全卫士,觉得很不错。以前自己也有写过小工具来除去那些可恶的流氓软件,所以就去申请加入他们的程序员志愿者。结果没有选上...下面是他们当时发给我的考核题目================================================================    编写一个程序,在此程序中运行a.exe,并使得a.exe认为是由explo

随便推点

SpringBoot链接RabbitMQ错误 Failed to instantiate [com.rabbitmq.client.Connection]_Cccccrj的博客-程序员信息网_failed to instantiate [org.springframework.amqp.ra

错误Failed to instantiate [com.rabbitmq.client.Connection]: Factory method ‘mqConnectionSeckill’ threw exception; nested exception is java.io.IOException原因当前用户没有访问权限设置权限rabbitmq配置错误没有配置rabbitmq.virtual-host = / 写成了rabbitmq.virtual-host=#Rabbitmq配置

web前端开发分享-css,js_柴神的博客-程序员信息网

1. web前端开发分享-css,js入门篇2. web前端开发分享-css,js进阶篇3. web前端开发分享-css,js提高篇4. web前端开发分享-css,js工具篇5. web前端开发分享-css,js深化篇6. web前端开发分享-css,js移动篇

QML之虚拟键盘简单使用_画茧自缚的博客-程序员信息网_qml 虚拟键盘

更改键盘皮肤1、先导入模块import QtQuick.VirtualKeyboard.Settings 2.22、设置“复古”皮肤/主题,目前除了默认的皮肤就这个了,感觉这个更漂亮VirtualKeyboardSettings.styleName = &amp;amp;amp;quot;retro&amp;amp;amp;quot;效果: 设置键盘大小和位置InputPanel { id: inputPanel

均值滤波、中值滤波、混合中值滤波C++源码实例_1lang的博客-程序员信息网

均值滤波、中值滤波、混合中值滤波C++源码实例,可运行。

统计学习方法第十四章作业:聚类—层次聚类聚合/分裂算法、K_means聚类算法 代码实现_是算法不是法术的博客-程序员信息网

层次聚类聚合/分裂算法import numpy as npimport copyimport matplotlib.pyplot as pltclass Hierarchical_cluster: def __init__(self,k=None,p=2,dis_way='min',c_way='agg'): self.k = k self.p = p self.dis_way = dis_way self.c_way =

RecyclerView遇到的一个坑,item.xml的layout属性失效,阅读源码了解坑的原理_qq_33946059的博客-程序员信息网

前言遇坑代码inflate源码分析前言我们都知道,使用RecyclerView时,需要填充一个item.xml。但是我运行程序员后,发现item.xml的根View的layout属性没有生效,解决办法就是将inflate(R.layout.item,null)改成inflate(R.layout.item,parent,false)。决解问题后并不满足,想看一看源码了解...

推荐文章

热门文章

相关标签