Java如何优雅替换if-else语句
目录
- 场景
- 1.优先判断条件,不满足及时中断
- 2.策略模式改造
- 3.策略模式+工厂+单例模式,锦上添花
场景
日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!
本文将介绍三板斧手段:
- 优先判断条件,条件不满足的,逻辑及时中断返回;
- 融入策略模式;
- 策略模式+工厂+单例模式,锦上添花;
接下来先附上一段很久以前自己写的业务代码,核心逻辑就是在支付回调中根据用户购买的价格包赋予用户对应的权益(VIP视频会员天数+抽奖机会次数)。我的天,太多if-else了……(看不清楚可以点击图片放大)
1.优先判断条件,不满足及时中断
这点非常容易理解,就是说在业务逻辑里面,先把不符合条件的给先过滤掉,而不是层层嵌套if-else判断,结合代码图看一下:
2.策略模式改造
先用策略模式替换掉文章开头讲到的,用户充值后根据价格包(付的多少钱)给用户增加VIP天数及抽检机会次数的逻辑,我这里就简化成"根据-价格包区分给用户增加不同的体育会员视频VIP天数"这个动作来讲解:
表面上看,代码稍微优雅了点,但是还是没和if-else彻底说拜拜,且recharge()充值方法可单独拎出来,只需要根据priceCode实例化不同的策略对象即可:
3.策略模式+工厂+单例模式,锦上添花
接下来使用"工厂类+单例"来给代码加点料:
到此这篇关于Java如何优雅替换if-else语句的文章就介绍到这了,更多相关Java替换if-else语句内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
如何优雅的替换掉Java代码中的if else
场景 平时我们在写代码时,需要针对不同情况处理不同的业务逻辑,用得最多的就是if和else. 但是如果情况太多,就会出现一大堆的"if else",这就是为什么很多遗留系统中,一个函数可能出现上千行的代码.当然你说可以通过抽取方法或者类来实现,每一个情况交给一个方法或者对应一个类来处理,但是这样做只是看起来代码整洁了一些,还是有大量的"if else",后面有新的逻辑时,又要添加更多的"if else",没有从根本上解决问题. 举个例子,短信发送
-
Java如何优雅替换if-else语句
目录 场景 1.优先判断条件,不满足及时中断 2.策略模式改造 3.策略模式+工厂+单例模式,锦上添花 场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!! 本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回: 融入策略模式: 策略模式+工厂
-
Java利用StringBuffer替换特殊字符的方法实现
在本实例中为保证学生输入的 Java 文件名合格,将利用 StringBuffer 类实现对 Java 文件名中的特殊符号进行替换,包括将中文状态下的"."和全角状态下的"."替换为英文状态下的".". 在本例实现过程中主要使用了 StringBuffer 类的字符查找和替换方法,实现代码如下: import java.util.Scanner; public class test2 { public static void main(Strin
-
详解Java如何优雅地书写if-else
目录 0. 引言 1. switch 2. 函数式接口 3. 策略模式 4. 卫语句 0. 引言 在日常开发中我们常常遇到有多个if else的情况,之间书写显得代码冗余难看,对于追求更高质量代码的同学,就会思考如何优雅地处理这种代码 下面我们来探讨下几种优化if else的方法 1. switch switch方法针对枚举值处理有不错的效果,比如针对不同的订单状态时要做不同的处理,因为状态值有限,这时我们就可以直接使用switch来针对不同状态做不同的处理: 原语句 public void b
-
Java控制语句之if、switch语句
java if语句 Java控制语句分为三大类:①顺序结构:②选择结构:③循环结构. -------------------------------------------------------------------------------- 选择结构又分为:①单选择结构:②双选择结构:③多选择结构. 主要涉及: if_else , switch , while , break 和 continue , for. if单选择结构 对条件表达式进行一次测试,若测试为真,则执行下面的语句,否则跳
-
Java使用Statement接口执行SQL语句操作实例分析
本文实例讲述了Java使用Statement接口执行SQL语句操作的方法.分享给大家供大家参考,具体如下: Statement执行SQL语句: 1. 对数据库的曾删改操作时,使用stmt.executeUpdate(sql) 执行给定 SQL 语句,分别为 insert .update.delete. 2. 对数据库做查询时,直接使用 stmt.executeQuery(sql),返回结果可以为一个resultSet结果集. 首先做一些准备工作: ①对要进行操作的数据库表进行封装,比如说我的数
-
java实现查找替换功能
本文实例为大家分享了java实现查找替换功能的具体代码,供大家参考,具体内容如下 查找 if(searchTxt.getText().equals("")){ JOptionPane.showMessageDialog(null, "查找内容不能为空!"); }else if(!searchTxt.getText().equals("")){ //searchDialog.dispose(); if(fileChoose.focus == 1){
-
Java 添加、替换、删除PDF中的图片的示例代码
概述 本文介绍通过java程序向PDF文档添加图片,以及替换和删除PDF中已有的图片.另外,关于图片的操作还可参考设置PDF 图片背景.设置PDF图片水印.读取PDF中的图片.将PDF保存为图片等文章. 工具:Free Spire.PDF for Java (免费版) Jar获取及导入:官网下载,并解压将lib文件夹下的jar文件导入java程序,或者通过maven仓库下载并导入. jar导入效果: Java代码示例 [示例1]添加图片到PDF import com.spire.pdf.*; i
-
Java正则表达式的替换和分组功能
前言 这篇来学习正则表达式的替换和分组功能,替换很好理解,分组有点复杂,特别是如何写有效的分组的正则表达式.这篇通过几个练习,简单了解下替换和分组功能. 1.替换功能 在String类有一个替换功能的方法,结合正则表达式去实现替换,下面是replaceAll()方法的举例. package regex; public class Demo1_Regex { public static void main(String[] args) { String str = "wo1shi2zhong3gu
-
Java map 优雅的元素遍历方式说明
Java 8 , Lambda + foreach 语法糖, 写起来非常的 clean public static void main(String[] args) { // map init Map<String, String> map = new HashMap<>(); map.put("k", "v"); /*=====处理函数只有单条语句=====*/ map.forEach((k, v) -> System.out.pri
-
Java 如何优雅的拷贝对象属性
场景 在 Java 项目中,经常遇到需要在对象之间拷贝属性的问题.然而,除了直接使用 Getter/Stter 方法,我们还有其他的方法么? 当然有,例如 Apache Common Lang3 的 BeanUtils,然而 BeanUtils 却无法完全满足吾辈的需求,所以吾辈便自己封装了一个,这里分享出来以供参考. 需要大量复制对象的属性 对象之间的属性名可能是不同的 对象之间的属性类型可能是不同的 目标 简单易用的 API copy: 指定需要拷贝的源对象和目标对象 prop: 拷贝指定对
随机推荐
- 基于vue实现分页/翻页组件paginator示例
- Vue开发中整合axios的文件整理
- vue2+el-menu实现路由跳转及当前项的设置方法实例
- JAVA基础之基本数据类型全面解析
- ASP.NET中CheckBoxList复选框列表控件详细使用方法
- Javascript基础教程之比较null和undefined值
- asp.net gridview列宽固定的几种方法介绍
- php线性表的入栈与出栈实例分析
- PYTHON正则表达式 re模块使用说明
- go语言使用pipe读取子进程标准输出的方法
- C#多线程编程中的锁系统基本用法
- 浅谈页面装载js及性能分析方法
- jquery实现导航固定顶部的效果仿蘑菇街
- Redis教程(五):Set数据类型
- Linux磁盘分区实战案例(必看篇)
- jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
- 扩展easyui.datagrid,添加数据loading遮罩效果代码
- jquery1.83 之前所有与异步列队相关的模块详细介绍
- NodeJs使用Mysql模块实现事务处理实例
- 简介JavaScript中setUTCSeconds()方法的使用