使用策略模式优化IF ELSE

2023-05-16

使用传统的if else扩展性不强,代码量越多阅读起来越困难

如果后期又要扩展条件语句维护起来就会变得非常的麻烦

  /**
     * 传统的If else 不容易扩展 代码量大的情况下代码阅读性不高
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入a,b,c,d四个字符中的任意一个");
        String traditionIfElse = scanner.next();
        //四层if else 看起来还好 但是如果代码量的增加就会导致阅读性越来越低
        if ("a".equals(traditionIfElse)){
            System.out.println("a");
        }else if ("b".equals(traditionIfElse)){
            System.out.println("b");
        }else if ("c".equals(traditionIfElse)){
            System.out.println("c");
        }else if ("d".equals(traditionIfElse)){
            System.out.println("d");
        }else {
            System.out.println("瞎瘠薄输入");
        }
    }

执行效果 

 

因此我们可以用策略模式来优化if else的代码让它变得更加的精简

统一的访问路径

public interface StrategyContext {
    /**
     * 文本输入
     * @param
     * @return
     */
    String strategyTest();
}

A实现类 

public class AtypeImplementation implements StrategyContext {

    @Override
    public String strategyTest() {return "a";}
}

B实现类

public class BtypeImplementation implements StrategyContext {

    @Override
    public String strategyTest(){return "b";}
}

C实现类

public class CtypeImplementation implements StrategyContext {

    @Override
    public String strategyTest() {
        return "c";
    }
}

D实现类

public class DtypeImplementation implements StrategyContext {

    @Override
    public String strategyTest() {
        return "d";
    }
}

 在使用枚举类型做工厂模式

public enum StrategyEnum {
    a("a",new AtypeImplementation()),
    b("b",new BtypeImplementation()),
    c("c",new CtypeImplementation()),
    d("d",new DtypeImplementation())
    ;

    private String text;
    private StrategyContext strategyContext;

    StrategyEnum(String text, StrategyContext strategyContext) {
        this.text = text;
        this.strategyContext = strategyContext;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public StrategyContext getStrategyContext() {
        return strategyContext;
    }

    public void setStrategyContext(StrategyContext strategyContext) {
        this.strategyContext = strategyContext;
    }
}

 main测试

public class StrategyIfElse {
    /**
     * 使用策略模式优化
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入a,b,c,d四个字符中的任意一个");
        String traditionIfElse = scanner.next();
        //使用枚举值优化if else
        StrategyContext strategyContext = StrategyEnum.valueOf(traditionIfElse).getStrategyContext();
        System.out.println(strategyContext.strategyTest());
    }
}

 

 效果和if else是一样的,但是代码变得精简了,后期的扩展也变得简单明了了

如果配合spring使用的话我们可以只需将Bean注入到IOC容器当中 直接使用getBean将实例代码获取出来这样就可以不用写枚举类型 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用策略模式优化IF ELSE 的相关文章

  • Python if else条件语句你懂了吗?

    在 Python 中 xff0c 可以使用 if else 语句对条件进行判断 xff0c 然后根据不同的结果执行不同的代码 xff0c 这称为选择结构或者分支结构 Python 中的 if else 语句可以细分为三种形式 xff0c 分
  • Python if-else使用

    1 从键盘上输 个数 xff0c 显示它的绝对值 不允许使 abs num 61 float input 34 请输入一个实数 xff1a 34 if num gt 0 print num else print num 2 假设 户名为ad
  • if else if else语句格式_Java中我如何去除if...else...语句?

    读牛人技术博客 A Java Geek 最开始觉得这样的想法很有创意 提前使用静态代码块把对象存入map容器中 xff0c 在需要的时候在取 他也有提到可以使用DI的方式把需要的对象提前注入好 xff0c 但是这两种方式都会造成内存的浪费
  • python中if else语句格式_Python if else条件语句

    我们前面看到的代码都是按顺序执行的 xff0c 也就是先执行第一条语句 xff0c 再执行第二条和第三条语句 一直到最后一条语句 xff0c 这就是所谓的顺序结构 然而 xff0c 在许多情况下 xff0c 序列结构的代码远远不够 比如一个
  • python中if else语句_Python if else条件语句

    条件语句用来判定所给条件是否满足要求 xff0c 根据判定的结果 xff0c 决定接下来的操作 条件语句是一种控制结构 xff0c 因为它们允许根据定义的特定条件 xff0c 控制在何时执行哪一部分的代码 条件语句是 Python 中最重要
  • Python 中if...else语法和作用、执行流程

    一 if else语法 作用 xff1a 条件成立执行if下方的代码 xff0c 条件不成立执行else下方的代码 案例说明 xff1a 比如拿成年网吧上网的例子 xff0c 如果成年 xff0c 就允许上网 xff0c 如果不成年 xff
  • matlab实现if else 的语句格式

    matlab代码 比较a与b的大小 xff0c 将较小值赋给较大值 if a lt b b 61 a else a 61 b end
  • Java 中如何使用枚举来消除 if/else

    今天 xff0c 准备重新学习一下 Java 中的枚举类型 为什么现在要去重新学习呐 xff1f 因为在刚开始学习 Java 的时候 xff0c 对于枚举这一块的学习不太重视 xff0c 工作之后发现用到枚举的地方挺多的 xff0c 就有了
  • Java 中如何优化大量的 if...else...

    策略模式 xff08 Strategy Pattern xff09 将每个条件分支的实现作为一个独立的策略类 xff0c 然后使用一个上下文对象来选择要执行的策略 这种方法可以将大量的if else语句转换为对象之间的交互 xff0c 从而
  • Python:同行if...else...详细教程

    我最近为游戏Apple Clicker写成就系统 xff0c 加上后整个程序的代码竟然超过2200行 xff0c 窗口启动时间也很慢 xff0c 主要是if else 使用的太多 于是查了查缩短代码的方法 xff0c 总结如下 xff1a
  • 使用策略模式优化IF ELSE

    使用传统的if else扩展性不强 xff0c 代码量越多阅读起来越困难 如果后期又要扩展条件语句维护起来就会变得非常的麻烦 传统的If else 不容易扩展 代码量大的情况下代码阅读性不高 64 param args public sta
  • 在C++中使用map来取代很多个if else和switch

    在C 43 43 中使用map来取代很多个if else和switch 利用map中的key和value键值对来取代if else效率会好不少 span class token macro property span class token
  • windows bat脚本使用if else(亲测可用)

    chcp 65001 64 echo off set p username 61 请输入用户名 if 34 username 34 61 61 34 admin 34 echo 欢迎管理员登录 xff01 else echo 用户名错误 x
  • GMT、UTC与24时区 等时间概念

    许多人都知道两地时间表简称为GMT或UTC 而世界时区表则通称为World Time 那么GMT与UTC的实质原意又是为何 世界时区又是怎么区分的 面盘上密密麻麻的英文单字代表着什么意义与作用呢 这些都是新手在接触两地时间表或世界时区表时
  • Hexo博客搭建部署GitHub

    Hexo博客 Hexo是一个简洁的静态博客页面 使用markdown渲染文件 在本地生产静态文件后可以部署到GitHub上 这样不需要占用自己的域名和服务器 其实我在很早之前就换用了hexo 原来的博客在csdn oceansec blog
  • Idea导入Eclipse项目

    文章目录 1 选择从已有文件导入 2 配置依赖 3 配置tomcat 在学习过程中经常遇到 eclipse 开发的项目 但是由于和 idea 配置有差异不能直接运行 需要做一些修改 1 选择从已有文件导入 使用 idea 导入文件 注意这里
  • Visual Studio 和 Visual Studio Code的区别?

    Visual Studio 是一个全能的 方便的开发环境 即 IDE 像代码自动完成 调试器 数据库集成 服务器设置和配置等 Visual Studio Code VSCode 只是一个跨平台的编辑器 但是用户可以根据自己的需求去增加插件
  • 安卓混合开发,使用WebView控件展示网页

    页面使用webview控件来实现 WebView是Android系统提供能显示网页的系统控件 它是一个特殊的View 他的作用就是 显示和渲染Web页面 加载网络上或本地assets中的html文件 与JavaScript交互调用 常用于同
  • 机械革命z2黑苹果改造计划第三番-macOS键盘快捷键&Win键盘适配

    macOS键盘快捷键 Win键盘适配 键盘区别 首先下图是苹果妙控键盘无指纹版 官网售价699 穷学生的我是真的买不起 然后下图是我正在使用的机械键盘ikbc w200 87键版本 可以看出两者在键位排列上的区别主要在于 win comma
  • 【学习笔记之操作系统原理篇】进程管理

    进程的概念 进程 单道程序 特点 顺序性 封闭性 独占性 可再现性 多道程序系统 特点 间断性 相互制约竞争资源 失去封闭性 共性资源 多个程序操作相同资源 不可再现性 运行结果不唯一 因为执行顺序不唯一 进程特征 动态性 一个进程可以对应

随机推荐

  • My_Admin 独立系统开发第一节

    项目介绍 My Admin 项目后台该后台采用Tp5 43 layuimini 研发 xff0c 系统呢是准备研发一个垃圾回收小程序 垃圾回收小程序是结合市场需求开发的一个集运营与跑男端的垃圾回收小程序 目的是企业可以通过招募跑男 xff0
  • uni-app快速入门开发一个项目

    hello 大家好 xff0c 我是老张 xff0c 有的人称呼我为张工 一个不务正业的PHP开发者 xff0c 立志于做一个全栈开发工程师 今天呢 xff0c 我想补充一章关于uni app 如何开发 xff0c 如何建立项目 xff0c
  • uni-app开发知识付费系统个人中心界面

    hello 大家好 xff0c 我是老张 xff0c 那个不务正业的PHP开发工程师 今天是我使用uni app开发在线教育系统的第三天了 xff0c 今天主要开发了底部菜单的 xff0c 学习页面 xff0c 个人中心页面 xff0c 先
  • 阿里云负载均衡的配置和使用场景

    解释下什么叫做负载均衡 负载均衡 xff0c 英文名称为Load Balance xff0c 其含义就是指将负载 xff08 工作任务 xff09 进行平衡 分摊到多个操作单元上进行运行 xff0c 例如FTP服务器 Web服务器 企业核心
  • phpstudy下的nginx服务器显示目录

    在linux下配置Nginx的目录显示 linux下的基本命令 cd 切换目录 ls 查看目录 找到你的phpstudy的环境 cd 进入环境你会看到如下图一样所示的图片 cd server 使用 ls查看你会得到如图所示 cd nginx
  • 我与AI的相识

    AI人工智能 xff0c 作为一名程序员竟然不懂AI xff0c 好吧 xff01 我就是不懂 xff0c 最开始是听老师在帮助我们分析自己所学的专业行情时 xff0c 老师提到了AI xff0c 这时我是懵逼的状态什么是AI xff0c
  • <PHP 输出九九乘法表 for循环 递归>《正三角》《倒三角》

    lt php header 34 content type text html charset 61 utf 8 34 九九乘法表 正三角 64 var integer for i 61 1 i lt 61 9 i 43 43 for j
  • TP5+七牛云文件上传

    利用七牛云作为图片服务器来使用 xff0c 为什么使用七牛云 xff0c 使用七牛云的好处有很多 xff0c 节省自己的服务器空间 xff0c 七牛云的使用方便 xff0c 便宜 好了下面就说下TP5使用七牛云进行文件上传 第一步 xff0
  • 七牛云图片的预览

    上一个博客写了如何将本地图片上传到七牛云 xff0c 那么问题来了 xff0c 上传完毕后 xff0c 我们怎么才能在本地进行展示查看呢 xff1f 按照我们以前的思路那就是 xff0c 七牛云的域名 43 图片的名字 xff0c 但是呢
  • 时间序列预测比赛小结

    一 时间序列基础 1 什么是时间序列 xff1f 表面上 xff0c 时间序列就是按照时间的先后顺序排列的一串数值数学意义上 xff0c 时间序列是一串随机变量 2 研究时间序列的目的 xff1f 点预测区间预测 3 什么样子的时间序列可预
  • Ubuntu下使用ECM上网介绍

    1 背景 为了验证展锐原厂的USB CDC EMC xff08 Ethernet Control Model xff09 驱动的上网功能 xff0c 需要搭建Linux系统 现将整个流程整理如下 2 环境搭建 安装虚拟机 VMware wo
  • 如何将本地代码上传到远程库main分支中

    1 本地代码上传到github 1 1 首先修改默认分支 在2020年10月1起 xff0c github默认主分支从master更名为main xff0c 以上提交方式会默认创建一个master分支 xff0c 为保持一致性 xff0c
  • 如何在putty终端上打开图形化管理工具

    有时候需要在putty这样的图形终端中打开图形化的管理工具会出现下面的错误 xff1a root 64 node2 Traceback most recent call last File 34 usr share virt manager
  • IMU/光电鼠标/轮式编码器的多传感器融合(非线性卡尔曼滤波)

    各传感器分析 imu 对于平面移动机器人 xff08 如扫地机器人 xff09 xff0c IMU只需要一般只需要使用陀螺仪的偏航角 xff08 YAW xff09 xff0c 陀螺仪的偏航角有时间漂移的误差存在 xff0c 一般分为系统漂
  • IMU/电子罗盘/轮式编码器的多传感器融合(非线性卡尔曼滤波)

    传感器分析 电子罗盘 xff08 Compass magnetometer xff09 对于平面运动机器人而言 xff0c 只需要xy平面上的数据即可求出来绝对角度 xff0c 这里电子罗盘需要做椭圆 gt 圆的传感器标定 电子罗盘上车的标
  • kalibr使用笔记

    官网 GitHub ethz asl kalibr The Kalibr visual inertial calibration toolbox The Kalibr visual inertial calibration toolbox
  • Python上传文件到百度网盘(一)

    前言 最近由于突发奇想要下载某网站电影 xff0c 当然资源也是爬来的 xff0c 然后是一堆M3u8格式的URL xff0c 为了保证防止资源后续失效的情况 xff0c 打算先下载下来 xff0c 然后加密压缩 xff08 xff5e x
  • Python上传文件到百度网盘(二)之文件切割

    前言 继续上文提到的使用Python上传文件到百度网盘的伟大事业 接口分析 上文我们完成了百度网盘上传的api的封装 xff0c 通过分析api我得出 xff0c 需要完成上传4m以上的文件的话 xff0c 是需要分片上传滴 xff0c 具
  • This指向及改变,DOM节点操作、获取,删除,各种节点

    这里写目录标题 DOM节点自定义获取元素节点方法操作元素节点的属性这是dataset的进一步理解 操作元素的类名操作元素节点中的内容函数的执行顺序this 重要 this全局变量中指向windowthis在对象的方法中指向调用者this在事
  • 使用策略模式优化IF ELSE

    使用传统的if else扩展性不强 xff0c 代码量越多阅读起来越困难 如果后期又要扩展条件语句维护起来就会变得非常的麻烦 传统的If else 不容易扩展 代码量大的情况下代码阅读性不高 64 param args public sta