重构代码(如果是 else )

2023-12-27

我试图重构代码,发现了这段代码。 您能否建议其中的任何重构,并请说出您使用的折射。

private void setUpBag(String language){
    if(language.equals("english")){
        /* add letters with English distribution to bag */
    }
    else if(language.equals("french")){
        /* add letters with French distribution to bag */
    }
    else if(language.equals("russian")){
        /* add letters with Russian distribution to bag */
    }
    else{
        throw new IllegalArgumentException("Unknown language");
    }
}

您实际上违反了 SRP(单一职责原则),因此每当添加新语言时您都需要接触此代码库。

为了避免大量的列表if else statements,您需要一个松散耦合的设计,其中addLetters() 行为应该单独实现LanguageImpl类(如英语等),如下面的代码所示,它使用状态模式:

步骤(1):定义Language界面

    public interface Language {
      addLetters();
    }

步骤(2):定义Language实施

    public English implements Language {
      //implement addLetters() for English
    }

    //Implement other Language Classes as well in separate classes

步骤(3):修改setUpBag方法采用Language object

    public void setUpBag(Language language){
        language.addLetters();
    }

Each Language此处的类遵循 SRP,这是设计 OOP 应用程序的关键,即每个语言类仅处理特定的行为。

你可以看here https://en.wikipedia.org/wiki/Single_responsibility_principle更多细节。

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

重构代码(如果是 else ) 的相关文章

随机推荐

  • 属性错误故障排除:“ResultSet”对象没有属性“findAll”

    我正在尝试解析http www ted com talks http www ted com talks所有演讲名称的页面 使用 BeautifulSoup 这是我所拥有的 import urllib2 from BeautifulSoup
  • 使用 PHP 和 XPath 获取与正则表达式匹配的 href

    我有一个包含多个超链接的页面 我想要得到的格式如下 div a href 123 text2 a div div a href 345 text1 a a href 678 text2 a div 我想提取三个 href 123 345 和
  • 停止 jQuery Mobile 滑动事件双冒泡

    我在 iPad Safari 上安装了 jQuery Mobile 由于某种原因 触摸滑动事件会触发两次 就在本周 人们在过去的一年中报告了同样的问题 但我找不到如何在不修改 jQuery Mobile 的情况下修复双重事件的解释 我不想这
  • 通过坐标提取PDF文本

    我想知道 Microsoft NET 中是否有一些 PDF 库能够通过给出坐标来提取文本 例如 在伪代码中 PdfReader reader new PdfReader reader Load file pdf Top bottom lef
  • 如何通过WebApi上传图片

    我如何通过上传图像文件ASP NET Web API 我在文件模式下有一个输入标签 并将其发布到 API 如何将其保存到服务器文件夹 我尝试了这段代码 但它不起作用 private void UploadWholeFile HttpRequ
  • WCF Restful返回HttpResponseMessage想要在设置内容时进行协商

    我有一个 WCF Restful 服务 我想要返回 HttpResponseMessage 的方法 因为它看起来是结构化的 而不仅仅是返回数据或异常或其他可能到达那里的东西 我假设这是正确的 如果不让我知道 但我的问题是当我尝试设置时会发生
  • 使用空花括号初始化

    第一次尝试 一切正常 class Base public Base std cout lt lt default ctor n Base b Base b one 另一种实现方式 添加explicit class Base public e
  • 使用模板将一组成员函数声明为友元

    给出以下代码 class A struct B static void doIt A pa struct C static void doIt A pa class A int i 9 below works but requires a
  • 通过执行批处理文件/powershell脚本设置播放设备

    我已将计算机 Windows 7 连接到电视 并且经常在数字音频 S PDIF 高清音频设备 和耳机 2 Corsair CA HS1 USB 之间更改声音输出设备耳机 我希望能够执行一个为我更改此设置的批处理 脚本文件 这样我就不必 右键
  • 转换 .wav 文件中的 RTP 序列有效负载

    我有一个文本文件 其中包含 VoIP 对话的 RTP 数据包的有效负载 十六进制 有谁知道如何将文本转换为文件 使用 c c 的 wav 音频 PS 我使用的是 GNU Linux Thanks 我用 Java 做了同样的事情 这是我用于测
  • 设置 d3.curveBundle.beta 似乎没有效果

    d3 文档d3 curveBundle https github com d3 d3 shape blob master README md curveBundle提供了如何设置的示例beta https github com d3 d3
  • 在 Android 上从图像序列创建视频

    我想通过以下代码从图像序列 在 Android 上 创建视频 opencv core IplImage image cvLoadImage sdcard mytest testimage jpg FFmpegFrameRecorder re
  • 我可以在 rsync 调用中包含密码吗?

    我使用 rsync 来更新我的静态网站 我现在cd到本地网站目录 然后运行rsync命令 然后在下一行输入密码 我已经保存了我的rsync调用文本片段 这样 rs只是扩展到我的电话 有没有办法使用类似的东西 p在末尾标记并包含密码 我的电话
  • ActionBarCompat 下拉菜单上的单选按钮样式

    我正在开发一个使用扩展主题的应用程序 style Theme AppCompat Light DarkActionBar 在我的一项活动中 有一个操作栏图标 显示三个带有单选按钮的选项 以下是菜单 XML 文件的摘录
  • HTTP 标头样式表

    根据这个 http www w3 org TR html4 present styles html h 14 6 http www w3 org TR html4 present styles html h 14 6我可以直接在 http
  • Java ArrayList 中 contains 的使用

    如果我有一个 String 的 ArrayList 构成 Java 中类的一部分 如下所示 private ArrayList
  • Django REST如何设置节流周期以允许10分钟内一个请求?

    文件说该期间应该是以下之一 s sec m min h hour d day 我很好奇是否可以将时间设置为类似的内容1 10min 看着code https github com encode django rest framework b
  • Go 中的 strings.Split

    文件names txt由许多名称组成 其形式如下 KELLEE JOSLYN JASON INGER INDIRA GLINDA GLENNIS 有谁知道如何拆分字符串 使其成为用逗号分隔的单个名称 KELLEE JOSLYN JASON
  • 在编译时获取表达式类型

    编程时使用auto有时 了解编译器在编译时使用的类型会很方便 如果编译在我需要知道类型的地方中止 那并不重要 简单的例子 std vector lt int gt s 1 2 3 for auto elem s elem 5 for aut
  • 重构代码(如果是 else )

    我试图重构代码 发现了这段代码 您能否建议其中的任何重构 并请说出您使用的折射 private void setUpBag String language if language equals english add letters wit