实际例子:不同管理员权限不一样,能够行使的操作也不一样。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| publicclassJudgeRole{ publicString judge(String roleName ) { String result = ""; if (roleName.equals( "ROLE_ROOT_ADMIN" )) { result = "ROLE_ROOT_ADMIN: " + "has AAA permission" ; }elseif( roleName.equals("ROLE_ORDER_ADMIN") ) { result = "ROLE_ORDER_ADMIN: " + "has BBB permission" ; }elseif( roleName.equals("ROLE_NORMAL") ) { result = "ROLE_NORMAL: " + "has CCC permission" ; }else{ result = "XXX" ; } return result; } }
|
枚举
什么角色能干什么事,这很明显有一个对应关系。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| publicinterfaceRoleOperation{ String op(); }
publicenumRoleEnumimplementsRoleOperation{ ROLE_ROOT_ADMIN { @Override publicString op() { return "ROLE_ROOT_ADMIN:" + " has AAA permission"; } }, ROLE_ORDER_ADMIN { @Override publicString op() { return "ROLE_ORDER_ADMIN:" + " has BBB permission"; } }, ROLE_NORMAL { @Override publicString op() { return "ROLE_NORMAL:" + " has CCC permission"; } }, }
publicclassJudgeRole { publicString judge( String roleName ) {
returnRoleEnum.valueOf(roleName).op(); } }
|
工厂模式
不同分支做不同的事情,很明显就提供了使用工厂模式的契机,我们只需要将不同情况单独定义好,然后去工厂类里面聚合即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
publicclassRootAdminRoleimplementsRoleOperation { privateString roleName; publicRootAdminRole(String roleName ) { this.roleName = roleName; } @Override publicString op() { return roleName + " has AAA permission" ; }
}
publicclassOrderAdminRoleimplementsRoleOperation { privateString roleName; publicOrderAdminRole( String roleName ) { this.roleName = roleName; } @Override publicString op() { return roleName + " has BBB permission"; } }
publicclassNormalRoleimplementsRoleOperation { privateString roleName; publicNormalRole( String roleName ) { this.roleName = roleName; } @Override publicString op() { return roleName + " has CCC permission"; } }
publicclassRoleFactory { staticMap < String, RoleOperation > roleOperationMap = newHashMap <>(); static{ roleOperationMap.put( "ROLE_ROOT_ADMIN", newRootAdminRole("ROLE_ROOT_ADMIN") ); roleOperationMap.put( "ROLE_ORDER_ADMIN", newOrderAdminRole("ROLE_ORDER_ADMIN") ); roleOperationMap.put( "ROLE_NORMAL", newNormalRole("ROLE_NORMAL") ); }
publicstaticRoleOperation getOp( String roleName ) { return roleOperationMap.get( roleName ); } }
publicclassJudgeRole{ publicString judge( String roleName ) { returnRoleFactory.getOp(roleName).op(); } }
|
策略模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
publicclassRoleContext { privateRoleOperation operation; publicRoleContext( RoleOperation operation ) { this.operation = operation; } publicString execute() { return operation.op(); } }
publicclassJudgeRole { publicString judge( RoleOperation roleOperation ) { RoleContext roleContext = newRoleContext( roleOperation ); return roleContext.execute(); } }
publicstaticvoid main( String[] args ) { JudgeRole judgeRole = newJudgeRole(); String result1 = judgeRole.judge( newRootAdminRole("ROLE_ROOT_ADMIN")); System.out.println( result1 ); String result2 = judgeRole.judge( newOrderAdminRole("ROLE_ORDER_ADMIN")); System.out.println( result2 ); String result3 = judgeRole.judge( newNormalRole("ROLE_NORMAL")); System.out.println( result3 ); }
|
参考文章
答应我,别再 if/else 走天下了可以吗?