大量if else的优化方案

大量if else的优化方案

问题

开发中遇到的问题:
在开发中经常会遇到,一个逻辑需要处理多种数据,每一种数据的处理逻辑都是不一样的。
这个时候就会出现很多判断的语句。例如

if 条件1 then
	...
elseif 条件2 then
	...
elseif 条件3 then
	...

或者使用Switch语法,但是其实都是一样的。这样的处理方式简单明了,但是难以维护。并且代码不易于阅读,想象有十几种情况,那么在一个逻辑处就需要写十几个if else 语句。
久而久之,这一堆代码就会变成一个优化项。

解决方案

问题分析

对于处理的数据,在不同的地方,可能会有不同的处理逻辑。例如有一份数据,这一份数据的里面有多个字段,其中有一个处理该份数据的地方,针对其中一个字段的不同值需要做不同的处理。那么就可能会出现上面的那种情况。

使用面向对象抽象构造对象

这个时候可以对这份数据进行抽象处理。
首先对这份数据进行分析,看这份数据在哪些地方的处理逻辑是不一样,哪些地方的处理逻辑是一样的。然后抽象出一致的内容。作为父类。
然后再根据不一样的内容。拆分成一个个的子类。
因为子类继承于父类。那么这个时候就可以将这些数据相同的处理逻辑写在父类上,由父类实现,然后对于处理逻辑不一样的地方可以让子类重写父类的方法。
这样就可以将这些不同的逻辑拆分到每一个子类中。而父类提供统一的接口。最后使用多态,那么就实现了对父类,设定的统一接口进行操作,但是不同的子类对象走不同的逻辑。
举个例子:


Enum value  // 当value为不同的枚举值时操作逻辑不一样

class ParentClass{
	fun operate() // 当value为不同的枚举值,执行该方法执行对应的操作
}

class ChildClassA{
	fun operate(){
		当value == A 时执行的操作
	}
}


class ChildClassB{
	fun operate(){
		当value == B 时执行的操作
	}
}


使用的地方:

原本:
	if vlaue == A then
		...
	elseif value == B then
		...
	end

现在:
	构造对象:
	ParentClass c1 = new ChildClassA()
	ParentClass c2 = new ChildClassB()

	//执行逻辑方法
	c1.operate()

从上面可以发现,使用面向对象的方法,可以将一些操作逻辑封装到对应的类中。并且当这些逻辑在不同情况下需要有不同的变化的时候,还可以使用面向对象的继承和多态,通过子类重写方法的方式,实现不同的子类走不同的逻辑。
而在使用的时候,只需要调用父类中对应的逻辑接口即可。不同的子类对象会走对应的不同的子类逻辑。

工厂模式解决子类对象创建问题

这个时候会发现,在上面的伪代码中还需要根据value的值创建不同的对象。对于这种情况,我们就可以使用设计模式中的工厂模式进行帮忙。将对象的实例化抽象到工厂类中。


Class Factory{
	static create(value){
		if value == 1 then
			return new ChildClassA()
		elseif value == 2 then
			return new ChildClass2()
		end
	}

}


	
那么在使用的时候

ParentClass c = Factory.create(value)
c.operate()

就实现了上面需要一大堆 if else 的问题

想想上面我们做了哪一些操作。

  1. 对数据,逻辑进行分析。将相同的数据,逻辑抽象封装成一个父类
  2. 针对不同的逻辑继承父类,封装到各个子类中。
  3. 使用工厂模式,针对不同的情况创建不同的子类。

这样做有什么好处?

  1. 解耦,操作数据的地方,跟数据本身进行解耦。这些操作都被封装到每一个子类中。只要确保传入一个父类类型的数据,那么操作数据的地方就可以执行。而不用管你具体value是什么值,要执行什么操作。
  2. 易于扩展,以前如果要扩展的话,那么就需要修改每一个操作数据的地方。这里有两个缺点。一个是修改,一个是每一个地方。对于代码都是尽量不去修改原本的代码。所以修改是一个缺点。而修改每一个操作数据的地方,不仅麻烦而且很容易漏掉。因此很麻烦,而如今,并不需要修改原本代码,只需要新增一个子类,然后重写对应的接口,就可以了。
  3. 易于维护。将这些内容都抽象到每一个类中,代码清晰,并且一处修改所有地方都会跟着修改。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
优化大量的if-else代码有多种方法。其中一种方法是使用枚举来替代if-else逻辑分支。通过定义一个枚举类型,将不同的条件与对应的处理逻辑关联起来,可以将if-else语句优化为一行代码。例如,可以使用枚举类型来获取订单状态的描述信息,而不需要使用大量的if-else语句来判断订单状态并返回相应的描述信息\[1\]。 另一种优化方法是合并条件表达式。通过将多个条件合并为一个复合条件,可以减少if-else语句的数量。这样可以提高代码的可读性和可维护性\[2\]。 还有一种优化方法是使用Optional。Optional是Java 8引入的一个类,用于处理可能为空的值。通过使用Optional,可以简化对空值的判断和处理,减少if-else语句的使用\[3\]。 总之,优化大量的if-else代码可以通过使用枚举、合并条件表达式和使用Optional等方法来实现。这些方法可以提高代码的可读性、可维护性和性能。 #### 引用[.reference_title] - *1* *3* [if-else代码优化的八种方案](https://blog.csdn.net/weixin_36755535/article/details/123377660)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [if-else优化](https://blog.csdn.net/weixin_43238030/article/details/127536083)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值