枚举

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";
}
}

避免大量ifelse(枚举、工厂模式、策略模式)的更多相关文章

  1. 工厂模式&策略模式。

    抽象.封装,具体事情做得越多,越容易犯错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,犯错误可能性就越少.好象我们从编程序中也能悟出人生道理.(百度百科) 不断抽象封装 ...

  2. 简单工厂模式&策略模式-简介与区别

    不得不说,这两种模式真的很像. 相似点:都用到了面向对象的继承.多态.抽象,都拥有相似的结构. 不同点:工厂模式仅提供具体的实例对象,怎么使用这个对象是client的自由,策略模式client可以通过 ...

  3. 3.js模式-策略模式

    1. 策略模式 策略模式定义一系列的算法,把它们封装起来,并且可以互相替换. var strategies = { isNonEmpty: function(value,errMsg){ if(val ...

  4. 命令模式 & 策略模式 & 模板方法

    一.策略模式 策略模式:封装易变化的算法,可互相替换. GoF<设计模式>中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换.该模式使得算法可独立于它们的客户变化. 比如 ...

  5. <大话设计模式>工厂模式,策略模式

    第一章:工厂模式: 通过封装,继承,多态解耦合 业务逻辑和界面逻辑分开 用单独的类创造实例,工厂:创造实例 工厂模式还可以用反射来实现,nsstringFromClass UML类图 聚合表示一众弱的 ...

  6. Go---设计模式(策略模式)

    策略模式定义了算法家族,在调用算法家族的时候不感知算法的变化,客户也不会受到影响. 下面用<大话设计模式>中的一个实例进行改写. 例:超市中经常进行促销活动,促销活动的促销方法就是一个个策 ...

  7. [Python模式]策略模式

    策略模式 定义了算法族,分别封装起来,让它们之间可以互相替换.此模式让算法的变化独立于使用算法的客户. 作为动态语言,Python实现策略模式非常容易,只要所有算法提供相同的函数即可. import ...

  8. java设计模式--行为型模式--策略模式

    策略模式: 策略模式 概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化. 适用性 1.许多相关的类仅仅是行为有异.“策略”提供了一种用多个行 ...

  9. 设计模式之——浅谈strategy模式(策略模式)

    strategy模式,即策略模式.个人觉得吧,策略模式更多的是一种思维方式. 首先我们要知道,为什么需要策略模式.举个例子,比如用程序输出今天下午去玩什么. PlayGame 玩游戏 package ...

  10. [19/05/01-星期三] GOF23_行为型模式(策略模式、模板方法模式)

    一.策略模式(strategy) [策略接口] /*** * "策略"接口 */ package cn.sxt.strategy; public interface Strateg ...

随机推荐

  1. 强化学习中Q-learning,DQN等off-policy算法不需要重要性采样的原因

    在整理自己的学习笔记的时候突然看到了这个问题,这个问题是我多年前刚接触强化学习时候想到的问题,之后由于忙其他的事情就没有把这个问题终结,这里也就正好把这个问题重新的规整一下. 其实,这个DQN算法作为 ...

  2. 成为Apache SeaTunnel贡献者的N种方式

    如何参与开源贡献 参与开源贡献的常见方法有多种: 1)参与解答 在社区中, 帮助使用过程中遇到困难的人,帮他们解释框架的用法也算是一种贡献. 2)文档贡献 帮助框架来完善文档,比如说将英文文档翻译为中 ...

  3. 根据域名获取IP

    /*************************************************************************************************** ...

  4. MessageBox弹出后无响应

    这几天学习了自定义模板对话框类,就是说不用系统定义的模板对话框类来创建对话框 消息处理就不用返回0了,可直接返回DefWindowProc HINSTANCE hInstance = ::GetMod ...

  5. ES7.5.2索引生命周期管理(附操作示例)

    一.前言 es可以用来存储日志,一般日志存储只是短期保存,超过一定时间日志要是能自动删除最好,这样保证索引文档不会过多,查询时效性也能得到保证.本文参考的官网地址是:https://www.elast ...

  6. 实用接地气的 .NET 微服务框架

    前言 微服务架构已经成为搭建高效.可扩展系统的关键技术之一,然而,现有许多微服务框架往往过于复杂,使得我们普通开发者难以快速上手并体验到微服务带了的便利.为了解决这一问题,于是作者精心打造了一款最接地 ...

  7. LaTeX 编译 acmart 文档报错:No country present for an affiliation.

    在编译一篇从 arXiv 下载的文档时遇到如下错误: Class acmart Error: No country present for an affiliation. 有两种解决方案: 将错误降级 ...

  8. 使用 setenv 配置文件管理 Tomcat 的自定义环境变量

    1.背景描述 有时候,我们会在 catalina.bat 或 catalina.sh 文件中,自定义一些环境变量,例如额外指定 JDK 路径或设置 JVM 参数. 实际上,直接在 catalina.b ...

  9. unity学习笔记(一)

    组件的概念 组件:一个或多个功能的容器,类似模块,插上去就有这个功能,不查没有 存在意义: 如果太依赖继承,继承树将会特别复杂 组件化设计思想有利于维护拓展 unity内任何游戏物体必须有Transf ...

  10. 合合信息通过ISO/IEC国际标准双认证,为全球用户提供高合规标准AI服务

    互联网.AI等技术的全球普及为人们提供便捷服务的同时,也带来了信息安全领域的诸多挑战.保护用户隐私及数据安全,是科技企业规范.健康发展的重心.近期,上海合合信息科技股份有限公司(简称"合合信 ...