记一次java简单的if语句使用多态重构
程序员文章站
2023-11-09 22:12:40
场景描述: 一个controller中,部门领导有布置任务,查看任务整体情况,查看部门成员,查看部门成员完成情况,导出任务详情,如下: 过了一段时间后,新需求来了,之前任务是需求任务,现在任务种类多了一个测试任务,但是接口要公用一套。所以Task加了一个type的字段用来区分不同的任务,1:原来类型 ......
场景描述:
一个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);
}
}