实际例子:不同管理员权限不一样,能够行使的操作也不一样。
| 12
 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;
 }
 }
 
 | 
枚举
什么角色能干什么事,这很明显有一个对应关系。
| 12
 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();
 }
 }
 
 | 
工厂模式
不同分支做不同的事情,很明显就提供了使用工厂模式的契机,我们只需要将不同情况单独定义好,然后去工厂类里面聚合即可。
| 12
 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();
 }
 }
 
 | 
策略模式
| 12
 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 走天下了可以吗?