当前位置: 首页 > 知识库问答 >
问题:

如果要考虑增加变量的数量,如何抽象我的代码以避免重复?

叶建柏
2023-03-14

目前有4种组合

  • 增加小时。
  • 增加天数。
  • 减去小时。
  • 减去天。
private String modifyDate(Character symbol, LocalDateTime date, Long digits, String period) {
        switch (symbol) {
            case '+':
                if (period.contains("days")) {
                    return date.plusDays(digits).toString();
                } else {
                    return date.plusHours(digits).toString();
                }
            case '-':
                if (period.contains("days")) {
                    return date.minusDays(digits).toString();
                } else {
                    return date.minusHours(digits).toString();
                }
            default:
                System.out.println("Not defined operation");
        }

        return "";
    }

如果增加了一个新的期间(比如年),则有必要在每种情况下添加一个新的If语句:

if (period.contains("years")) {
    return date.plusYears(digits).toString();
} else if (period.contains("days")) {
    return date.plusDays(digits).toString();
} else {
    return date.plusHours(digits).toString();
}

此外,如果添加了新的意外情况(组合,特别是情况),则有必要重复逻辑以验证周期。

您有改进解决方案的建议吗?模式推荐,功能接口实现,欢迎任何推荐。

提前谢谢!

共有2个答案

颛孙昆
2023-03-14

这可以通过策略模式与枚举相结合来解决。

https://www.tutorialspoint.com/design_pattern/strategy_pattern.htm

颜宸
2023-03-14

Martin Fowler的一般建议是用多态性替换条件。

https://www.refactoring.com/catalog/replaceConditionalWithPolymorphism.html

设计模式而言,这通常是策略模式用策略替换条件逻辑。

https://www.industriallogic.com/xp/refactoring/conditionalWithStrategy.html

如果您有一个小的、有限的条件集,我建议使用枚举来实现策略模式(在枚举中提供一个抽象方法,并为每个常量重写它)。

我希望它能对你有所帮助。

 类似资料:
  • 我正在开发一个旧的Struts应用程序,它有一个抽象操作,通过填充Excel模板文件来创建Excel导出。 每个Excel导出操作都扩展此父类,并添加自己的实现来填充Excel模板,并定义自己的模板和输出文件名。 实现是这样的,这就是SonarQube“警告”代码重复的地方: 有没有办法避免重复?

  • 我有一个对话框组件: 如果我想在父组件中使用它: 这是有效的,我的意思是应用程序不会崩溃。但是我被警告说,我应该声明一个数据/计算属性;这很奇怪,因为如果我想变异5-7个道具,对于它们中的每一个,我也必须在子组件上声明一个数据属性?如果父级有,,数据道具,那么如果我想在子级上变异它们,子级也应该声明它们?我们不是在重复自己吗?我如何防止这种重复?

  • 问题内容: 我们都知道全局变量只是最佳实践。但是在有些情况下,没有它们很难编写代码。您使用什么技术来避免使用全局变量? 例如,在以下情况下,您将如何不使用全局变量? JavaScript代码: 相关标记: 此代码来自具有多个的网络表单。它一次上传一个文件,以防止大量请求。它通过POST到iframe来完成此操作,等待响应触发iframeonload,然后触发下一个提交。 您不必专门回答此示例,我只

  • 问题内容: 如何避免使用!进行力解开的操作,因为使用此方法通常是错误的选择。 如下所示的代码中有什么更好的选择,使用它可以使代码看起来更简单,并且可以通过if检查变量!被调用永远不会为零,因此不会崩溃。 我的教练向我们介绍了bang(!)运算符,然后告诉我们不要再使用它了。告诉我们原因,如果可选为nil,它将使我们的应用程序崩溃。 但是,我发现自己处于类似bang运算符似乎是最简洁和最安全的选择的

  • 如何在 postman 中验证响应中的所有数据返回 id、名字、姓氏等的结果数量 下面是响应的样子: 我想验证两件事: 1)响应返回id,first_name,last_name,电子邮件 2)所有的first_name都等于“Sebastian ”,不管只有一个结果还是100个结果 这是我尝试过的,但它只适用于一个结果:

  • 钱箱类: 商户类: 输入数据: 我的任务 计算每个商家的总金额并返回商家列表 我正在尝试使用Stream API解决这个任务。并编写了以下代码: 结果 但显然,流返回四个对象,而不是所需的两个对象。我意识到,地图(第二行)为每个cashBoxId创建了四个对象。而且我不知道如何通过进行过滤,也不知道如何获得没有重复的结果。