代码重构之——少用Switch语句

【高质量代码系列2】switch 语句重构技巧总结 switch 语句在日常开发中,常常用来根据不同的类型,执行不同的操作。如果类型很多,整个swtich代码会变得很臃肿,代码可扩展性、可阅读性都很差。针对这个问题,我们可以考虑使用多态来解决,将每个类型的行为封装到一个子类中。下面以加减等计算类型的操作为例说明这个问题 1public enum CalculateType { 2 3 ADD("add","加法"),SUB("sub","... 阅读详情

一 概述

        对于面向对象程序而言,为了避免switch语句的重复问题,我们应该少用switch(或case)语句。

二 利用多态替换switch语句

        对于switch语句,我们可以考虑利用多态来对它进行替换。

三 Java中多态的必要条件

       1. 重写:重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!这样的好处在于子类可以根据需要,定义特定于自己的行为。

           但是:重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。

        2. 继承类(实现接口)

        3. 父类引用指向子类对象:Parent p = new Child();

如何用设计模式重构重复Switch代码 在软件开发中,条件判断是基础控制结构之一,而switch语句是处理多分支场景的常见方式。但当相同switch逻辑在多处重复出现时,就会导致代码维护困难、违反开放封闭原则等问题。通过策略模式、状态模式等面向对象设计模式重构重复switch,可以有效提升代码的可维护性和扩展性。这种重构在电商订单处理、物流状态管理等业务场景中尤为重要,能显著降低因漏改分支导致的线上故障。结合Spring框架的动态注册和注解扫描等进阶技巧,还能实现更灵活的业务规则管理。 阅读详情

相关推荐

重构代码中的 if/else 嵌套和 switch 语句

文章目录不使用else提前 return线性罗列改为do-while表驱动法多态参考资料 不使用else 提前 return 比如有代码: public int fibonacci(int n){ if(n <= 2){ return 1; }else{ return fibonacci(n-1) + fibonacci(n-2); } } 尽量写成: publ...

在到处之间找我 1916

重构:消除switch

这几天总结一下之前学习重构过程中比较令我印象深刻的一步。曾经对面向对象的理解是“像现实世界一样编写程序”,面向过程则是规规矩矩的机器思维的灵活演变。前不久在《重构》里经历前后page穿针走线的几小口啃食后,发现原来面向对象需要have its own fashion.说“面向对象”是一种“思想”,是有其根基的。而其中比较典型的就是去除switch的过程。

灰羽的博客 5155

CMU动作捕捉数据集实战:从AMC文件到Python可视化的完整流程

本文提供了CMU动作捕捉数据集的完整实战指南,详细解析了AMC文件格式,并对比了MATLAB转换、Python原生解析及转换为BVH格式三种数据解析策略。重点介绍了如何构建Python数据处理与可视化管道,包括将数据转换为Pandas DataFrame、绘制时间序列与相关性热力图,以及实现3D骨架动画,帮助开发者高效利用这一经典动作捕获数据集进行运动分析与模型训练。

android的专栏 716

为什么程序员都不喜欢使用switch,而是大量的 if……else if ?

点击上方“后端技术精选”,选择“置顶公众号”技术文章第一时间送达!出处:熊爸爸的科技工坊3g.163.com/tech/article/E02RDE6C0511SDDL....

Java笔记虾 639

实例讲解Simulink应用层开发CAN报文解包及CAN信号设置方法

本文通过讲解MCU CAN解包模块的模块设置、输入输出信号的设置及仿真测试验证,说明了CAN解包模块的设置方法、CAN解包模块输入输出信号的设置方法以及CAN解包模块的仿真测试及修正方法。在模型搭建过程中,建议养成一种搭建完成仿真测试验证的习惯,在模块阶段发现错误,解决错误,避免在后期模块集成之后报出大量错误,增加解决错误的工作量和难度。希望通过本文的介绍能给相关技术人员带来一些参考和帮助。

qq_43011586的博客 5682

Xilinx XDMA驱动代码分析及用法

Xilinx XDMA驱动代码分析及用法 先简单的介绍一下,赛灵思的XDMA的驱动是用于做什么的、他的主要功能就类似与网卡pcie接口的网卡驱动、用于控制主机与fpga设备进行pcie的通讯。通讯的主要方式是设备文件的读写,这里不清楚的同学可以看一下我上一篇文章。通过控制设备文件的读写,操作驱动与fpga设备进行数据传输。 1、目录结构 zacha@Superman:~/nfs/xdma-debug/dma_ip_drivers-master/XDMA/linux-kernel$ tree -C . ├──

恍恍惚惚的大穷猫的博客 3万+

Java中如何优雅的消除Swtich Case

Java中如何优雅的消除Swtich Case 背景 现实生活中,多少童鞋写过下面这种代码: void ReceiveMessage(Message message) { switch(message.type) { case TYPE1: // handle type1 break; case TYPE2; // handle type2 break; // o...

Smiling_Morning的博客 1931

PICO SCOPE 二次开发

基于C#开发一个简单的PICO示波器的上位机工作,与MCC600运动控制卡一起,实现数据自动采集

nixoncheng的博客 1149

【Java】switch-case 和 if-else 的运行效率差异

同理来说,如果是 String 类型,则同样换算数字来进行计算,只不过使用的是 String 的 Hashcode 方法来获取 String 的对应数值。那么在这种情况下,switch-case 的效率是比较低的。在 switch 的情况稀疏的情况下,tableswitch 的 table 表示在空间方面变得低效,也可以使用lookupswitch 指令。在 switch-case 中,case 的值是连续的话,会生成一个 TableSwitch 来进行优化,这样的情况下,只需要在表中进行判断即可。

雨下一整晚real的博客 3170

SQL Server 2025在Windows 11上的安装避坑指南

SQL Server 是微软主流关系型数据库管理系统,其安装与Windows操作系统深度耦合;Windows 11作为新一代桌面平台,强化了基于虚拟化的安全(HVCI)、驱动签名强制策略(WDAC)及内核隔离机制,导致传统数据库部署流程失效。理解二者底层交互原理,是解决服务启动失败、配置管理器无法打开、远程连接被拒等高频问题的技术前提。本文聚焦SQL Server 2025与Windows 11的兼容性挑战,覆盖系统预配置、安装节点诊断、防火墙与服务权限调优等工程实践环节,适用于高校教学、电赛备赛、中小企业

weixin_28741413的博客 322

【ERROR】ERROR1: PROJ: proj_create_from_database: Cannot find proj.db - 环境变量配置与路径修复指南

本文详细解析了地理空间数据处理中常见的【ERROR】ERROR1: PROJ: proj_create_from_database: Cannot find proj.db 错误。该错误的根源是PROJ库无法定位其核心数据文件proj.db。文章提供了从问题诊断到修复的完整指南,包括如何在不同系统(Windows/macOS/Linux)和安装方式(Conda/pip/源码编译)下找到正确的proj.db文件路径,并通过设置PROJ_LIB环境变量(临时、代码内或永久)彻底解决问题,同时给出了进阶排查技巧和

m2n3o4p5的博客 557

为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?

缺点一. 语法正确,逻辑错误 缺点二 .死板的语法 缺点三 .需要子函数来处理分支 switch 的 优点 首先,请用5秒钟的时间查看下面的代码是否存在bug。 OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。 缺点一. 语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法

致力于C语言C++知识分享! 850

[STC32G144K246入门第一步]点亮LED

STC32G144K246是一款高性能32位8051单片机,集成了丰富外设资源,适用于工业控制和复杂算法处理。该芯片支持双模式内核,内置硬件加速器,提供246KB Flash和144KB SRAM存储空间。文章详细介绍了开发环境搭建步骤、寄存器配置方法,并给出了LED驱动示例代码,通过推挽输出控制P42口实现闪烁效果。虽然开发环境相比ARM存在不足,但通过合理配置仍可满足项目需求。该教程为开发者快速上手STC32G144K246提供了实用参考。

sinat_58149788的博客 800

重构:改善既有代码的设计 阅读笔记

程序有两面价值:“今天可以为你做什么”和“明天可以为你做什么”。大多数时候,我们只关注自己今天想要程序做什么。不论是修复错误或是添加特性,我们都是为了让程序能力更强,让它在今天更有价值。但是系统当下的行为,只是整个故事的一部分,如果没有认清这一点,你无法长期从事编程工作。如果你为求完成今天的任务而不择手段,导致不可能在明天完成明天的任务,那么最终还是会失败。但是,你知道自己今天需要什么,却不一定知道自己明天需要什么。也许你可以猜到明天的需求,也许吧,但肯定还是有些事情出乎你的意料。.........

Coding for freedom 926

【Unity】【VR】如何让Distance Grab抓取物品时限制物品的Rotation

VR中Canvas抓取旋转问题的解决方案 在VR应用中,Canvas作为UI面板常需被抓取拖动,但默认会随手柄产生Z轴旋转,导致UI歪斜。Unity的Rigidbody冻结旋转功能对此无效,因为XR抓取直接修改Transform而非物理模拟。

每日出拳老爷子的博客 611

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【重构】使用简单工厂模式重构Switch语句

Code Smell:Switch Statements Switch语句的问题在于,一旦有新case出现,Switch语句块就要加上这条case。如果Switch语句块很多且散布在不同的地方,找到并修改它们将是非常恐怖的事

Sarah的博客 7688

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

简单易懂读《重构》 - Switch Statement (switch语句过多)

少用switch语句,尽量用多态取代

Hermaeus Mora's Apocrypha 2371

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

代码坏味道与重构之重复的 Switch 和循环语句

代码坏味道与重构之重复的 Switch 和循环语句

Jock2018的博客 1179

重构的艺术:如何用20行代码替代百行Switch语句

配置化:将分支逻辑转化为数据结构领域化:用业务语言替代编程语法可视化:让逻辑流转可观测可追踪。

weixin_39789686的博客 902

对switch进行拆分重构,降低复杂度,6种方式

如何对switch进行拆分重构 在我们编写代码的时候,常常遇到许多if-else或者switch的情况,这种情况下如果分支过多,会导致我们的最大复杂度过大,可能在公司编代码的时候通过不了检测,我们可以对这些分支提取成方法单独存在,也只是能降低平均圈复杂度,最大还是无济于事,所以这里我写了三种方式来降低复杂度: 1、利用多态,也就是方法重写 2、方法重写加反射 3、纯反射 如果谁有更好的方法,欢迎指正分享 先来看一下普通的switch语句: public class Test4 { public s

IT_CREATE的博客 9161

重构一:用多态替换switch语句

    编程中我们尽量少用switch语句,使用switch语句会出现大量重复代码,我们可以采用java的多态特性,使用state模式来替换switch语句,具体方式如下:    举个例子,假设一个电影租赁的程序,包括客户(Customer)、租赁(Rental)、电影(Movie)三个类, 在Movie类中,有一个获取电影租金的方法getChartge,它需要根据电影的类型和租期来计算电...

chens616的专栏 9079

利用策略枚举对讨厌的Switch Case 语句进行重构

本文中介绍如何利用策略枚举对讨厌的Switch Case 语句进行重构,不仅更简洁,而且性能更好。

timchen525的专栏 2351

switch方法重构案例

面向对象语言开发过程中对于switch语句是很敏感的,大多数switch基本都可以通过多态方式进行重构,从而使程序获得较好的拓展能力,最近项目开发中遇到这样一个案例,在此分享一下。 重构前程序 Java代码 public void update(Request newReq){ Request existReq=dao.getExist(); Type _t

大河塬 1785

用多态重构switch语句

好吧,我这个菜鸟确实是常常在用面向过程的思想在考虑问题,在编写程序。现在我已经摈弃了自己对java语言个人的偏见,而是用平等公平的态度看待java和C++。他们各有千秋,各有乾坤的。 好吧,入正题。假设有这么个基类: public class Base { public Base(int arg){ this.arg = arg; } void show(){ switch(

pty_2007的专栏 7420

一种避免Switch语句的鲜为人知的方法

如何对代码执行这种友好操作。 像我一样,你可能已经学会了避免在源代码中使用大量if语句。他们很难读;代码很难遵循,而且通常很难看。 看一看: 一堆丑陋的条件 当然,这只是从真实应用程序的上下文中推断出的示例。试想一下,我们在语句内执行函数调用。也许还有其他条件检查。 大多数编码员采用的解决方案是什么? 让我们分析提供的示例。将表达式与一堆值进行比较,然后在其中一个为时执行一些代码true。你想到了吗?只需使用一条switch语句。 一堆丑陋的条件 我故意留下了break,即使在这里由于return

头名字W的博客 1479

Switch箭头表达式实战:3步重构你的旧版Switch代码

掌握Java 12 Switch 的箭头表达式,3步轻松重构冗长switch代码。适用于多分支逻辑优化,简化语法、避免break错误,提升可读性与维护性。实战演示旧代码升级技巧,值得收藏。

VarFlow的博客 977
上一篇: Java实现Encode和Decode
下一篇: @NotNull的依赖
至学者
博客等级 码龄9年 180粉丝 773原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值