Map+函数式接口 是Java8的新特性lambda表达式
-
判断条件放在key中
-
对应的业务逻辑放在value中
这样子写的好处是非常直观,能直接看到判断条件对应的业务逻辑
业务场景,当你做大型项目时,常常因为一个方法里根据不同的角色去做不同的处理
当登录人组织机构结构很复杂时,也许你会用多个if else去判断,然后执行不同的逻辑,写完你才发现,一个方法可以达到一两百行,修改的时候头疼不已。
@Service
public class QueryRoleService {
@Autowired
private RoleSerive roleSerive;
private Map<String, Function<String,String>> roleMap=new HashMap<>();
/**
* 初始化业务分派逻辑,代替了if-else部分
* key:
* value: lambda表达式
*/
@PostConstruct
public void dispatcherInit(){
roleMap.put("管理员",id->roleSerive.adminPression(id));
roleMap.put("部门领导",id->roleSerive.departPresion(id));
roleMap.put("普通员工",id->roleSerive.employeePression(id));
}
public String getResult(String orgCodeName,String orgCode){
Function<String,String> result= roleMap.get(orgCodeName);
if(result!=null){
return result.apply(orgCode);
}
return "";
}
}
@Service
public class RoleSerive {
public String adminPression(String id){
return "管理员权限业务逻辑";
}
public String departPresion(String id){
return "部门领导权限业务逻辑";
}
public String employeePression(String id){
return "员工权限业务逻辑";
}
}
@PostMapping(value = "/role")
public Result<?> role(String orgCodeName,String orgCode) {
queryRoleService.getResult(orgCodeName,orgCode);
return Result.OK("添加成功!");
}