我在工作一年时怎么都看不懂的编程写法。今天手把手教给你

作为一名程序员,你一定遇到或亲自写过这样的代码。有人将它形象的形容为shi山,或者被戏称为“面向保就业编程”。

image-20240109224714584

以下面这个代码为例,其中的问题也显而易见,当越来越多的条件判断时,代码会变得非常臃肿,难以维护。

    String mediaType = "blogger";
    if ("lxf".equals(mediaType)) {
        System.out.println("廖雪峰");
     } else if ("JavaPub".equals(mediaType)) {
        System.out.println("知名博主");
    } else if ("msb".equals(mediaType)) {
        System.out.println("马士兵");
    }
    ...

image-20240109224734174

解决

怎么办呢?

首先想到的一定是使用三目运算符,但是问题也显而易见,不能处理过多的情况。

    int price = condition?80:100;

还有什么办法呢,枚举定义、合并查询条件、java8 新特性 Optional 等等,但是这些方法都治标不治本。当判断多了起来,还是会变得臃肿。

策略模式

接下来就讲一下今天的推荐方案,策略模式。

你一定不要排斥这种设计模式,简单来看其实很简单。

策略模式是一种行为设计模式,它允许你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。这句话可能有点绕,我们来看一个具体的例子。

首先,我们把每个条件逻辑代码块,抽象成一个公共的接口,可以得到以下代码:

    // 获取博主信息接口
    public interface IMediaService {
        void showMedia();
    }

我们根据每个逻辑条件,定义相对应的策略实现类,可得以下代码:

    // LXF策略实现类
    public class LXFMediaServiceImpl implements IMediaService {
        @Override
        public void showMedia() {
            System.out.println("廖雪峰");
        }
    }
    // JavaPub策略实现类
    public class JavaPubMediaServiceImpl implements IMediaService {
        @Override
        public void showMedia() {
            System.out.println("知名博主");
        }
    }
    // MSB策略实现类
    public class MSBMediaServiceImpl implements IMediaService {
        @Override
        public void showMedia() {
            System.out.println("马士兵");
        }
    }

接下来,我们再定义策略工厂类,用来管理这些博主信息实现策略类,如下:

    // 博主信息服务工产类
    public class MediaServicesFactory {

        private static final Map<String, IMediaService> map = new HashMap<>();
        static {
            map.put("lxf", new LXFMediaServiceImpl());
            map.put("JavaPub", new JavaPubMediaServiceImpl());
            map.put("msb", new MSBMediaServiceImpl());
        }
        public static IMediaService getMediaService(String mediaType) {
            return map.get(mediaType);
        }
    }

使用了策略+工厂模式之后,代码变得简洁多了,如下:

    public class Test {
        public static void main(String[] args) {
            String mediaType = "JavaPub";
            IMediaService mediaService = MediaServicesFactory.getMediaService(mediaType);
            mediaService.showMedia();
        }
    }

看到这里,是不是很简单。

这样的好处也显而易见,就是可以灵活的切换不同的博主信息,比如:

  • 我想看JavaPub的信息,只需要将mediaType设置为JavaPub即可。
  • 我想看马士兵的信息,只需要将mediaType设置为msb即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/305775.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Minecraft教程:使用MCSM面板搭建我的世界私服并实现远程联机

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 前言 Li…

学习笔记之——3D Gaussian Splatting及其在SLAM与自动驾驶上的应用调研

之前博客介绍了NeRF-SLAM&#xff0c;其中对于3D Gaussian Splatting没有太深入介绍。本博文对3D Gaussian Splatting相关的一些工作做调研。 学习笔记之——NeRF SLAM&#xff08;基于神经辐射场的SLAM&#xff09;-CSDN博客文章浏览阅读967次&#xff0c;点赞22次&#xff0…

【野火i.MX6ULL开发板】在MobaXterm平台利用Type-C线串口连接开发板

0、前言 参考文献&#xff1a; http://t.csdnimg.cn/9iRTm http://t.csdnimg.cn/Z0n60 问题&#xff1a;一直识别不出com口&#xff0c; 拟解决思路&#xff1a; 百度网盘重新下载Debian镜像&#xff0c;烧入full版镜像&#xff0c;随便换一下USB插口&#xff08;电脑主机上…

EI级 | Matlab实现VMD-TCN-GRU变分模态分解结合时间卷积门控循环单元多变量光伏功率时间序列预测

EI级 | Matlab实现VMD-TCN-GRU变分模态分解结合时间卷积门控循环单元多变量光伏功率时间序列预测 目录 EI级 | Matlab实现VMD-TCN-GRU变分模态分解结合时间卷积门控循环单元多变量光伏功率时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【EI级】Matlab实现…

图片纹理贴图

/* * 当需要给图形赋予真实颜色的时候&#xff0c;不太可能为没一个顶点指定一个颜色&#xff0c;通常会采用纹理贴图 * 每个顶点关联一个纹理坐标 (Texture Coordinate) 其它片段上进行片段插值 * */#include <iostream> #define STBI_NO_SIMD #define STB_IMAGE_IMPLE…

【Docker】Docker基础

文章目录 安装使用帮助启动命令镜像命令容器命令 安装 # 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine # 设置存储库 sudo yum install -y yum-utils …

数据结构与算法(十)深度优先搜索与广度优先搜索

广度优先搜索 广度优先搜索&#xff1a;从一个顶点出发&#xff08;由开始时顶点创造顺序优先决定&#xff09;&#xff0c;访问所有没有被访问过的临节点。然后在从被访问过的节点出发&#xff0c;重复之前的操作 如下为一个图 从1出发&#xff0c;先后访问2 3&#xff0c;之后…

VMware复制粘贴共享文件夹

win和虚拟机之间&#xff0c;无法复制粘贴&#xff0c;共享文件夹的解决方案。 安装VMware tools 1&#xff0c;先检查虚拟机设置部分。共享文件夹已启用。复制粘贴已启用。 2&#xff0c;安装tools.选择重新安装VMware tools. (此图片为安装过的截图) 成功后会显示如图。…

C++的一些书籍整理(个人学习)

UNIX环境高级编程&#xff08;第三版&#xff09; UNXI网络编程卷1 网络编程的笔记 收藏 我会了 一堆书 这个仓 数据库连接池原理介绍常用连接池介绍

计算机体系结构期末复习流程大纲

1.存储器和cache 存储器的容量、速度与价格之间的要求是相互矛盾的&#xff0c;速度越快&#xff0c;没bit位价格越高&#xff0c;容量越大&#xff0c;速度越慢&#xff0c;目前主存一般有DRAM构成。 处理器CPU访问存储器的指标&#xff1a; 延迟时间&#xff08;Latency&am…

LeetCode刷题--- 下降路径最小和

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…

Oracle文件自动“减肥”记

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

欧拉图及其应用

什么是欧拉图 提到欧拉图就要谈到哥尼斯堡七桥问题&#xff0c;最初有这样的一个问题的&#xff1a;18世纪中叶&#xff0c;东普鲁士哥尼斯堡城有一条贯穿全城的普雷格尔河&#xff0c;河中有两个岛&#xff0c;通过七座桥彼此相连&#xff0c;如下图所示 问题是这样的&…

UnitTestreport之UnitTest用例失败重运行机制

前言 很多小伙伴一直在诟病unittest&#xff0c;说unittest相对pytest来说太鸡肋了&#xff0c;pytest中提供了很多高级功能unittest中都没有。在这里还是想为unittest打抱不平一下&#xff0c;unittest是由python官方维护的官方库&#xff0c;官方库都是比较轻量级的&#xf…

以太坊开发者会议回顾:坎昆升级、硬分叉与布拉格

作者&#xff1a;Christine Kim Galaxy研究副总裁 编译&#xff1a;秦晋 碳链价值 2024年1月4日&#xff0c;以太坊开发人员齐聚Zoom for All Core Developers Execution (ACDE) Call #178 上。ACDE电话会议通常由以太坊基金会协议负责人Tim Beiko主持&#xff0c;是一个开发人…

【STM32】STM32学习笔记-串口发送和接收(27)

00. 目录 文章目录 00. 目录01. 串口简介02. 串口相关API2.1 USART_Init2.2 USART_InitTypeDef2.3 USART_Cmd2.4 USART_SendData2.5 USART_ReceiveData 03. 串口发送接线图04. USB转串口模块05. 串口发送程序示例06. 串口发送支持printf07. 串口发送支持printf_v208. 串口发送和…

5分钟彻底搞懂什么是token

大家好啊&#xff0c;我是董董灿。 几年前在一次工作中&#xff0c;第一次接触到自然语言处理模型 BERT。 当时在评估这个模型的性能时&#xff0c;领导说这个模型的性能需要达到了 200 token 每秒&#xff0c;虽然知道这是一个性能指标&#xff0c;但是对 token 这个概念却不…

聚道云软件连接器助力某餐饮管理有限公司实现人力资源信息自动化

客户介绍&#xff1a; 某餐饮管理有限公司是一家集餐饮连锁、餐饮管理、餐饮咨询等业务于一体的综合性餐饮企业。公司业务遍布全国多个城市&#xff0c;拥有众多员工。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 客户痛点&#xff1a; 员工入离职…

怎样把照片不想要的部分涂抹掉?安利下面这三款软件给你

在元旦假期的旅行中&#xff0c;我带着相机&#xff0c;用镜头记录下了每一个美好时刻。我爬上了高山之巅&#xff0c;俯瞰群山连绵起伏&#xff1b;我漫步在海滩上&#xff0c;感受海风轻拂脸颊&#xff1b;我甚至在城市的角落里&#xff0c;发现了那些平日里未曾留意的小确幸…

Unity 踩坑记录 AnyState 切换动画执行两次

AnySate 切换动画 Can Transition To Self 将这个勾选去掉&#xff01;&#xff01;&#xff01;