枚举

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. 神秘 Arco 样式出现,祭出 Webpack 解决预期外的引用问题

    神秘 Arco 样式出现,祭出 Webpack 解决预期外的引用问题 Webpack是现代化的静态资源模块化管理和打包工具,其能够通过插件配置处理和打包多种文件格式,生成优化后的静态资源,核心原理是将 ...

  2. Python-目标检测-将xml文件转换成.txt文件

    代码说明:labels文件夹是工程下的一个文件夹,里面存放的是一些xml文件. 然后我们将这些xml文件中的内容取出来,放在路径path1的文件名下.这样也就完成了xml文件到txt文件的转化. 该代 ...

  3. 关于没使用Mybatis 分页,分页sql默认执行count(0) 的问题

    之前的Impl 的方法 :selectFromList(String uid, Integer pageNum, Integer pageSize) 之后的Impl 的方法 :selectFromLi ...

  4. 学习SSD—day1_20240814

    1.SSD的基本概念以及结构 SSD是一种以半导体(半导体闪存)作为存储介质吗,使用纯电子电路实现的存储设备. SSD硬件包括几大组成部分:主控.闪存.缓存芯片DRAM(可选,有些SSD上可能只有SR ...

  5. 如何用C语言操作sqlite3,一文搞懂

    sqlite3编程接口非常多,对于初学者来说,我们暂时只需要掌握常用的几个函数,其他函数自然就知道如何使用了. 数据库 本篇假设数据库为my.db,有数据表student. no name score ...

  6. JAVA——水仙花数问题

    2024/07/12 1.问题 2.错误解法 3.错误分析 4.正确解法 5.其他:关于Java中幂函数的用法 6.参考 1.问题 2.错误解法 import java.util.Scanner; p ...

  7. C++开发分类

    1.基础架构 2.音视频领域 3.安全方向 4.Linux虚拟化 5.Qt客户端.上位机 6.游戏领域 7.嵌入式 8.量化券商 暂时对基础架构.音视频和安全方向较为感兴趣.

  8. esp32挂esphome

    esp32挂esphome 使用docker创建容器 docker run -d --name='esphome' \ --restart=always \ -p 6052:6052 \ -e TZ= ...

  9. locale 设置

    locale 介绍 在终端中,locale(本地化)设置是指与本地语言.国家和文化偏好有关的环境变量的配置.这些设定决定了程序如何处理和显示字符.时间.日期格式.货币等. 在类 Unix 系统(比如 ...

  10. Linux 磁盘命名规则

    IDE硬盘:早期的 IDE 接口硬盘被命名为hd[a-d],其中 hd 表示硬盘(Hard Disk),后面的字母 a 至 d 代表系统中第一至第四个 IDE 硬盘.不过,随着 SATA 接口硬盘的普 ...