目录
一、引言
二、问题代码
三、优化后的代码
一、引言
我们在实际项目开发中,一定会充斥着大量这种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();}
}