java - 什么时候使用静态类而不是单例模式?

标签 java design-patterns

我读过 this问题和一些类似的问题,我想知道在什么情况下我应该在单例模式上使用静态类?

最佳答案

当您有“纯代码”方法时,使用静态“实用程序”类(一个只有静态方法的类)——您不需要需要基类的任何特定实现的方法,或者界面。关键指标是代码是无状态 - 即类中没有(静态)字段为其提供状态。无状态还意味着这些方法自动是线程安全的 - 另一个好处。

JDK 中有很多例子(Collections 是一个著名的例子)和 apache commons libraries这种模式非常有效。

此外,为了避免“类膨胀”,而不是为特定的琐碎实现创建一个类,您可以使用返回特定实现的静态(抽象)工厂方法,例如:

public static Comparator<String> createCaselessStringCompatator() {
    return new Comparator<String> () {
        public int compare(String o1, String o2) {
            return o1.toUpperCase().compareTo(o2.toUpperCase());
        }
    }; 
}

public static Comparator<String> createNumericStringCompatator() {
    return new Comparator<String> () {
        public int compare(String o1, String o2) {
            return new Double(o1).compareTo(new Double(o2));
        }
    }; 
}

此模式避免为仅相当于一行实际有用代码(即“closure”)创建一个全新的类文件并且它将它们捆绑在一起,因此如果您知道您的实用程序类名,您的 IDE 将提示您选择哪个实现:

Collections.sort(myStringList, MyComparators.|<-- ctrl+space to offer options

如果没有这种模式,您将不得不记住每个实现的类名。

关于java - 什么时候使用静态类而不是单例模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8789130/

相关文章:

design-patterns - CRUD 有哪些好的设计模式?

wpf - MVVM 中的 ViewModel 是否应该引用 View?

java - 为什么同步在第二个代码中不起作用?

java - 什么时候应该开始使用字符串替换而不是 sprintf?

Java 通知设计模式

java - 为什么 Kotlin 类默认是 final 而不是 open?

model-view-controller - 就 MVC 模式而言,Struts 2 中使用的 Action 是什么?

java - 在当前线程上模拟用户

java - 从 PHP 到 C/C++ & Java 及其他

java - 在 javafx webview 中加载 URL 会导致 JVM 崩溃