记一次java简单的if语句使用多态重构
2024-10-07 20:29:25
场景描述:
一个controller中,部门领导有布置任务,查看任务整体情况,查看部门成员,查看部门成员完成情况,导出任务详情,如下:
@RestController
@RequestMapping(value = "/task")
public class TaskController{ @PostMapping(value = "/saveTask")
public JSONObject saveTask(Task task){
...
} @PostMapping(value = "/taskDetail")
public JSONObject taskDetail(Task task){
...
} @PostMapping(value = "/memberList")
public JSONObject memberList(Task task){
...
} @PostMapping(value = "/memberDetail")
public JSONObject memberDetail(Task task){
...
} @PostMapping(value = "/exportTask")
public JSONObject exportTask(Task task){
...
}
}
过了一段时间后,新需求来了,之前任务是需求任务,现在任务种类多了一个测试任务,但是接口要公用一套。所以Task加了一个type的字段用来区分不同的任务,1:原来类型的任务,2:测试任务,controller变成如下(Task的类型type应该写在常量里面):
@RestController
@RequestMapping(value = "/task")
public class TaskController{ @PostMapping(value = "/saveTask")
public JSONObject saveTask(Task task){
if( Constants.COMMON_TASK == task.type){
...
}else if( Constants.TEST_TASK == task.type){
...
}
} @PostMapping(value = "/taskDetail")
public JSONObject taskDetail(Task task){
if( Constants.COMMON_TASK == task.type){
...
}else if( Constants.TEST_TASK == task.type){
...
}
} @PostMapping(value = "/memberList")
public JSONObject memberList(Task task){
if( Constants.COMMON_TASK == task.type){
...
}else if( Constants.TEST_TASK == task.type){
...
}
} @PostMapping(value = "/memberDetail")
public JSONObject memberDetail(Task task){
if( Constants.COMMON_TASK == task.type){
...
}else if( Constants.TEST_TASK == task.type){
...
}
} @PostMapping(value = "/exportTask")
public JSONObject exportTask(Task task){
if( Constants.COMMON_TASK == task.type){
...
}else if( Constants.TEST_TASK == task.type){
...
}
}
}
再之后又有新任务类型加进来,继续往这个controller的几个方法中增加if-else。目前的开发流程是controller-->service-->dao,判断那种任务,然后走到service调用这个任务的业务方法,现在使用多态的方法把if-else语句重构掉
首先创建一个抽象类,把共同的方法抽离出来
@Service
public abstract class BaseTaskService{ public abstract JSONObject saveTask(Task task); public abstract JSONObject taskDetail(Task task); public abstract JSONObject memberList(Task task); public abstract JSONObject memberDetail(Task task); public abstract JSONObject exportTask(Task task); }
然后不同的任务继承这个抽象类,具体的业务逻辑在自己的类上处理,需求任务:
@Service
public class CommonTask extends BaseTaskService{ @Ovreride
public JSONObject saveTask(Task task){
...
} @Ovreride
public JSONObject taskDetail(Task task){
...
} @Ovreride
public JSONObject memberList(Task task){
...
} @Ovreride
public JSONObject memberDetail(Task task){
...
} @Ovreride
public JSONObject exportTask(Task task){
...
}
}
测试任务:
@Service
public class TestTask extends BaseTaskService{ @Ovreride
public JSONObject saveTask(Task task){
...
} @Ovreride
public JSONObject taskDetail(Task task){
...
} @Ovreride
public JSONObject memberList(Task task){
...
} @Ovreride
public JSONObject memberDetail(Task task){
...
} @Ovreride
public JSONObject exportTask(Task task){
...
}
}
再之后创建工厂类返回任务类
@Service
public class TaskFactory{ @Autowired
private CommonTask commonTask;
@Autowired
private TestTask testTask;
... public BaseTaskService getTask(Integer type){
if(Constants.COMMON_TASK.equals(type){
return commonTask;
}else if(Constants.TestTask.equals(type){
return testTask;
}else if(...){
...
}
...
}
}
最后修改controller就大功告成
@RestController
@RequestMapping(value = "/task")
public class TaskController{ @Autowired
private TaskFactory taskFactory; @PostMapping(value = "/saveTask")
public JSONObject saveTask(Task task){
BaseTaskService currentTask = taskFactory.getTask(task);
return currentTask.saveTask(task);
} @PostMapping(value = "/taskDetail")
public JSONObject taskDetail(Task task){
BaseTaskService currentTask = taskFactory.getTask(task);
return currentTask.taskDetail(task);
} @PostMapping(value = "/memberList")
public JSONObject memberList(Task task){
BaseTaskService currentTask = taskFactory.getTask(task);
return currentTask.memberList(task);
} @PostMapping(value = "/memberDetail")
public JSONObject memberDetail(Task task){
BaseTaskService currentTask = taskFactory.getTask(task);
return currentTask.memberDetail(task);
} @PostMapping(value = "/exportTask")
public JSONObject exportTask(Task task){
BaseTaskService currentTask = taskFactory.getTask(task);
return exportTask(task);
}
}
最新文章
- 数据库Blob数据类型转String
- 最新榜单!消金企业TOP10,数据、风控、催收服务方TOP5
- python 集合 -----直接用逗号连接的是元组,不是list
- PHP会话Session
- ant简述
- 关于BitmapFactory解析流的问题a
- Js对象转String的函数 和 JSON转String
- Repeater 控件 当数据源没有数据的时候显示 暂无数据 的两种方式
- AWS 命令行界面 + Python 的 AWS 开发工具包 (Boto3)
- PHPCMS v9修改栏目或者单页没有权限
- 用MySQL创建数据库和数据库表
- Duplicate entry &;#39;97112&;#39; for key 1
- zabbix3.2.3安装部署
- 关于STM32空闲中断
- Jmeter之性能测试插件PerfMon Metrics Collector监听器,实时监听服务器资源(十四)
- 在nginx上用FastCGI解析PHP
- html的基础属性
- 函数式编程(九)——map,filter,reduce
- React 基础实例教程
- 记录一个python公式罗列的方法 join()方法和map()方法的妙用