我读过 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/