Map+函数式接口替代 多个if-else逻辑

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("添加成功!");
	 }

猜你喜欢

转载自blog.csdn.net/weixin_41018853/article/details/131893057