当前位置: 移动技术网 > IT编程>开发语言>Java > 记一次java简单的if语句使用多态重构

记一次java简单的if语句使用多态重构

2019年11月01日  | 移动技术网IT编程  | 我要评论

鳄鱼咬掉同伴前腿,情剑神龙,福州出租房

场景描述:
  一个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);
		}
	}    

  

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网