策略模式代替if else 【原创】
更多靠谱软件破解教程,戳这里!!(破解目录汇总)
哈喽,大家好,我是程小南,导航搬砖工一名,致力于为大家淘出更多有趣好使的生产力工具!
小南最近接手了一个新项目。
发现了一有趣的事情。
同时,也给小南上了一课。
程序还得会玩啊!!!
由于具体业务不方便透露。
小南就从中摘抄并整编成下面内容。
if-else
if ("群体A".equals(type)) {
//优惠方式1优惠逻辑
} else if ("群体B".equals(type)) {
//优惠方式3优惠逻辑
} else if ("群体C".equals(type)) {
//优惠方式3优惠逻辑
} else {
logger.info("找不到对应的优惠类型");
}
switch
switch (type) {
case "群体A":
//优惠方式1优惠逻辑
break;
case "群体B":
//优惠方式2优惠逻辑
break;
case "群体C":
//优惠方式3优惠逻辑
break;
default:
logger.info("找不到对应的优惠类型");
break;
}
以上两种是在开发过程中比较常用的,适用于代码量小,逻辑简单。一旦代码长度偏长,逻辑复杂时,闭眼都能想象,满篇幅的if-else。一个是影响了可读性,另一个改起来也特别费劲,生怕动一某个变量影响整个代码块的逻辑。可维护性低。
策略模式
策略模式在这里简单理解就是把 if语句里面的逻辑或switch语句中case里面的逻辑抽取出来,把它放到一个策略类中。这样每个判断都改成了一个类,需要修改的时候只要改对应的类,不用担心影响到其它的类的实现逻辑,方便维护。对于简单的逻辑其实没必要搞得这么复杂,if-else几行代码就能解决。可以看出一旦策略类多了,也很麻烦。
函数式接口
在实际使用的过程中在函数式方法中业务逻辑复杂时,也就是if语句块业务复杂。常常把这部分抽取除独立的业务Service。也常配合好策略类一起用。
总之,以上的每个方法行,都有一定的优缺点,if-else都能让人玩出花来,程序员要努力!