避免大量ifelse(枚举、工厂模式、策略模式)
枚举
public class Test { public static void main(String[] args) { System.out.println(judge("ROLE_ROOT_ADMIN")); } public static String judge(String roleName){ return RoleEnum.valueOf(roleName).operation(); } } interface RoleOperation { String operation(); } enum RoleEnum implements RoleOperation { ROLE_ROOT_ADMIN { @Override public String operation() { return "root"; } }, ROLE_ORDER_ADMIN { @Override public String operation() { return "order"; } }, ROLE_NORMAL_ADMIN { @Override public String operation() { return "normal"; } }; }
工厂模式
import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { System.out.println(judge("ROLE_ROOT_ADMIN")); } public static String judge(String roleName) { return RoleFactory.getOperation(roleName).operation(); } } interface RoleOperation { String operation(); } class RoleFactory { static Map<String, RoleOperation> roleOperationMap = new HashMap<>(); static { roleOperationMap.put("ROLE_ROOT_ADMIN", new RootAdminRole("ROLE_ROOT_ADMIN")); roleOperationMap.put("ROLE_ORDER_ADMIN", new RootAdminRole("ROLE_ORDER_ADMIN")); roleOperationMap.put("ROLE_NORMAL_ADMIN", new RootAdminRole("ROLE_NORMAL_ADMIN")); } public static RoleOperation getOperation(String name) { return roleOperationMap.get(name); } } class RootAdminRole implements RoleOperation { private final String roleName; public RootAdminRole(String roleName) { this.roleName = roleName; } @Override public String operation() { return roleName + " root permission"; } } class OrderAdminRole implements RoleOperation { private final String roleName; public OrderAdminRole(String roleName) { this.roleName = roleName; } @Override public String operation() { return roleName + " order permission"; } } class NormalRole implements RoleOperation { private final String roleName; public NormalRole(String roleName) { this.roleName = roleName; } @Override public String operation() { return roleName + " normal permission"; } }
策略模式
package test; public class Test { public static void main(String[] args) { System.out.println(judge(new RootAdminRole("ROLE_ROOT_ADMIN"))); } public static String judge(RoleOperation roleOperation) { RoleContext roleContext = new RoleContext(); roleContext.setOperation(roleOperation); return roleContext.execute(); } } // 策略 interface RoleOperation { // 策略方法 String operation(); } // 环境类:持有一个策略类的引用,最终给客户端调用 class RoleContext { private RoleOperation roleOperation; public void setOperation(RoleOperation roleOperation) { this.roleOperation = roleOperation; } public String execute() { return roleOperation.operation(); } } // 具体策略类 class RootAdminRole implements RoleOperation { private final String roleName; public RootAdminRole(String roleName) { this.roleName = roleName; } @Override public String operation() { return roleName + " root permission"; } } class OrderAdminRole implements RoleOperation { private final String roleName; public OrderAdminRole(String roleName) { this.roleName = roleName; } @Override public String operation() { return roleName + " order permission"; } } class NormalRole implements RoleOperation { private final String roleName; public NormalRole(String roleName) { this.roleName = roleName; } @Override public String operation() { return roleName + " normal permission"; } }
本文作者:n1ce2cv
本文链接:https://www.cnblogs.com/sprinining/p/15701047.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步