枚举

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. 如何在通用异常处理时获取到方法名称(获取注解参数JoinPoint)

    1.背景 很多时候我们在梳理公共异常时,需要获取到接口的而具体名称,便于很好的提示是那个接口错误了 2.实现逻辑 1.在controller方法上的注解上写方法名称,一般使用了swagger都有方法名 ...

  2. 美化一下WPF自带得ToolTip

    对照一下原版和美化以后得版本 原版: ---------- 新版: 新增了 圆角 和 阴影效果; 第一步:新建项,最下面有一个自定义控件,取名为CornerToolTip. 第二步:系统会创建一个Co ...

  3. QT基础-弹出框(信息框,模态框,操作框)

    学习前端知识的时候就了解到让用户使用的界面一定要足够清晰,因为你永远不知道用户会以何种方式打开你开发的软件,所以莫泰提示框就很重要了.下面将会介绍几本的集中模态对话框,用来提升用户体验! 1.模态框 ...

  4. C语言中的短路现象

    短路现象1 比如有以下表达式 a && b && c 只有a为真(非0)才需要判断b的值: 只有a和b都为真,才需要判断c的值. 举例 求最终a.b.c.d的值. ma ...

  5. JavaScript设计模式样例十六 —— 备忘录模式

    备忘录模式(Memento Pattern) 定义:保存一个对象的某个状态,以便在适当的时候恢复对象.目的:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.场景:数据缓存. ...

  6. Ubuntu APT sources.list 文件格式解释

    单行风格(传统) 传统的 sourses.list 文件使用单行风格配置,下面是两条单行风格的配置项: deb http://archive.ubuntu.com/ubuntu jammy main ...

  7. 关于java连接数据库时提示异常java.sql.SQLException: No suitable driver found for说明

    当我们测试一个新的数据库服务时,需要使用对方提供jdbc驱动来连接数据库,有时候简单的写个demo去连接,发现提示异常: java.sql.SQLException: No suitable driv ...

  8. Java 1.8 Stream流原理与用法总结

    一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream:基础接口,声明了流管理的核心 ...

  9. 一个SQL查询走索引时涉及到的最左前缀原则

    一个SQL查询走索引时涉及到的最左前缀原则 在讲解最左前缀原则之前,先复习一下MySQL索引的重要基础知识(下面都将基于InnoDB存储引擎下的索引规则) 索引类型 主键索引 InnoDB存储引擎使用 ...

  10. ComfyUI 基础教程(三) —— 应用 Controlnet 精准控制图像生成

    一.前言 你是否有见过下面类似这样的图片: 看起来平平无奇,当你站远点看,或者把眼睛眯成一条缝了看,你会发现,这个图中藏有一些特别的元素.这就是利用了 Ai 绘画中的 ControlNet,实现对图片 ...