【问题标题】:Utility classes - static methods vs Singleton instance with utility methods [closed]实用程序类 - 静态方法与带有实用程序方法的单例实例 [关闭]
【发布时间】:2018-06-04 19:03:02
【问题描述】:

我正在尝试在为实用程序类编写最佳代码的两种不同方法之间做出选择。

选项 1:

public class UtilityClass {

    public static ClassB method1(ClassA obj1, ClassA obj2) {
          //Some lines of code
    }

    public static ClassC method2(ClassD obj1, ClassD obj2) {
          //Some lines of code
    }
}

选项 2:

public enum UtilityEnum {
    INSTANCE;

    public ClassB method1(ClassA obj1, ClassA obj2) {
          //Some lines of code
    }

    public ClassC method2(ClassD obj1, ClassD obj2) {
          //Some lines of code
    }
}

我相信选项 1 为内联提供了空间。选项 2 将把实例放在堆中。这会影响性能吗?哪种方式最可取?

【问题讨论】:

  • 即使可能对性能产生影响,那也是次要的。但是您可能需要考虑的一件事是单元测试。单元测试静态方法并不总是微不足道的,但根据您的实际实现,差异可能可以忽略不计。
  • 拥有一个实例不会增加任何内容。它只是一个静态方法,里面有一个额外烦人的名字。
  • softwareengineering.stackexchange.com 可能是这个问题更好的地方。

标签: java methods singleton static-methods


【解决方案1】:

如果您可以使用选项 1,这是最好的选择,因为最简单但在某些情况下是不可能的。 事实上,如果您的实用程序方法依赖于一个或多个其他类(依赖项),使用选项 1,您需要添加所需的依赖项作为实用程序方法的参数。 使用选项 2,您可以使用其依赖项初始化单例,而无需更改每个实用程序方法的签名。

问问自己:在这种情况下我真的需要单身吗? (见On design patterns: When should I use the singleton?)如果不是,解决方案1绰绰有余。

【讨论】:

    猜你喜欢
    • 2011-06-06
    • 2015-08-12
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2011-03-26
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多