第五章 if语句优化之工厂策略模式+Supplier接口(四)

news/2024/11/28 5:45:59/

目录

一、引言

二、问题代码

三、优化后的代码


一、引言

我们在实际项目开发中,一定会充斥着大量这种if elseif的等号条件判断语句,这种写法我们称之为流水账。随着后续判断条件逐步递增,执行体的业务功能越来越复杂、代码量越来越多时,包含该if elseif条件的方法体的代码行数将为每日递增,造成非常难以维护的局面,代码的可读性也会变得非常差。 

二、问题代码

package com.wzx;public class Test {public static void main(String[] args) {int x = 1;if (x == 1) {System.out.println("X3");} else if (x == 2) {System.out.println("X2");} else {System.out.println("X3");}}
}

三、优化后的代码

我们通过Supplier函数式接口+工厂类+Optional组合形式来优化上述代码:

package com.wzx;public class X1Strategy implements XInterface {@Overridepublic void print() {System.out.println("X1");}
}
package com.wzx;public class X2Strategy implements XInterface {@Overridepublic void print() {System.out.println("X2");}
}
package com.wzx;public class X3Strategy implements XInterface {@Overridepublic void print() {System.out.println("X3");}
}
package com.wzx;public interface XInterface {void print();
}
package com.wzx;import java.util.Map;
import java.util.Optional;
import java.util.function.Supplier;public class Test {public static void main(String[] args) {Map<Integer, Supplier<XInterface>> factories = Map.of(1, X1Strategy::new,2, X2Strategy::new);Supplier<XInterface> x = Optional.ofNullable(factories.get(1)).orElseGet(() -> X3Strategy::new);x.get().print();}
}


http://www.ppmy.cn/news/1550541.html

相关文章

深入解析 EasyExcel 组件原理与应用

EasyExcel 是一个为了简化 Excel 操作&#xff0c;而封装的一个 Java 工具库。它支持读写 Excel 97-2003 和 Excel 2007 格式的文件。 以下是一个使用 EasyExcel 读取 Excel 文件的简单示例&#xff1a; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.read…

【springboot】读取外部的配置文件

【springboot】读取外部的配置文件 一、使用场景二、代码实现&#xff08;一&#xff09;application.yml 的配置&#xff08;二&#xff09;编辑 customer.yml&#xff08;三&#xff09;自定义方法读取外部配置文件&#xff08;四&#xff09;使用外部配置文件的配置 一、使用…

Node.js的url模块与querystring模块

新书速览|Vue.jsNode.js全栈开发实战-CSDN博客 《Vue.jsNode.js全栈开发实战&#xff08;第2版&#xff09;&#xff08;Web前端技术丛书&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 4.3.1 http模块——创建HTTP服务器、客户端 要使用http模块&#xff0…

mac 安装node提示 nvm install v14.21.3 failed可能存在问题

如果你在 macOS 上使用 nvm&#xff08;Node Version Manager&#xff09;安装 Node.js 版本 v14.21.3 时遇到安装失败的问题&#xff0c;可以按照以下步骤进行排查和解决&#xff1a; 1. 确认 nvm 安装是否正确 首先&#xff0c;确认你的 nvm 是否正确安装&#xff0c;并且能…

数据结构(汇总)

1.1.1 基本概念 数据&#xff1a;数据是信息的载体&#xff0c;是描述客观事物属性的字、字符及所有能输入到计算机并且被计算机程序识别和处理的符号的集合。&#xff08;数据是计算机程序加工的原料&#xff09; 数据元素、数据项&#xff1a; 数据元素是数据的基本单位&am…

Vue前端开发-slot传参

slot 又称插槽&#xff0c;它是在子组件中为父组件提供的一个占位符&#xff0c;使用来表示&#xff0c;通过这个占位符&#xff0c;父组件可以向中填充任意的内容代码&#xff0c;这些代码将自动替换占位符的位置&#xff0c;从而轻松实现在父组件中控制子组件内容的需求。 作…

R中单细胞RNA-seq数据分析教程 (2)

引言 本系列开启R中单细胞RNA-seq数据分析教程[1]&#xff0c;持续更新&#xff0c;欢迎关注&#xff0c;转发&#xff01; 导入Seurat包 首先&#xff0c;请确认你的R软件已经安装了Seurat这个包。 library(Seurat) 这会将您已安装的Seurat包载入您当前的R环境中。通常不会出现…

Android 项目引入gradle Connect timed out

Could not install Gradle distribution from https://services.gradle.org/distributions/gradle-6.7.1-all.zip. Reason: java.net.SocketTimeoutException: Connect timed out 通过离线下载对应版本的gradle Index of /gradle/ 打开配置文件&#xff1a;gradle/wrapper…