1、案例引入
例如当前有这么一段大量if/else的业务逻辑处理代码,如下所示:
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class DemoApplicationTests {
@Test
void noDesign(){
String name="张三";
if(name.equals("张三")){
// 张三的业务逻辑部分
System.out.println("张三完成任务");
}else if(name.equals("李四")){
// 李四的业务逻辑部分
System.out.println("李四完成任务");
}else if(name.equals("王五")){
// 王五的业务逻辑部分
System.out.println("王五完成任务");
}
}
}
在上述代码里面我们采用类似于下面的这两行代码去代替真实的业务逻辑:
// 张三的业务逻辑部分
System.out.println("张三完成任务");
上述这些代码当if/else的分支处理逻辑逐渐增多时,该区域就会看起来比较臃肿,代码不美观,而且也不利于后期维护,对于这种情况我们可以采用策略模式+工厂模式+模板方法模式对其进行优化。
2、使用策略模式进行优化
首先我们使用策略模式将if里面的这部分算法逻辑抽取出来, 抽取为一个个策略类:
/**
* 策略模式的总接口
*/
public interface Handler{
public void doThings() ;
}
每一个具体的策略类(ZhangSanHandler、LiSiHandler、WangWuHandler)中的doThings方法表示策略方法:
public class ZhangSanHandler implements Handler{
@Override
public void doThings() {
// 张三的业务逻辑部分
System.out.println("张三完成任务");
}
}
public class LiSiHandler implements Handler{
@Override
public void doThings() {
// 李四的业务逻辑部分
System.out.println("李四完成任务");
}
}
public class WangWuHandler implements Handler{
@Override
public void doThings() {
// 王五的业务逻辑部分
System.out.println("王五完成任务");
}
}
接着我们可以使用抽取出来的策略方法去代替if里面之前的代码逻辑,可以把if里面的多行代码变成一行代码: