public class StaticField {
private static StringBuffer cache = new StringBuffer();
public static void addString(String s){
cache.append(s).append("/n");
}
public static void clear() {
cache.setLength(0);
}
}
public class Singleton {
private static final Singleton ourInstance = new Singleton();
public static Singleton getInstance() {
return ourInstance;
}
private Singleton() {
}
private StringBuffer cache = new StringBuffer();
public void addString(String s){
cache.append(s).append("/n");
}
public void clear() {
cache.setLength(0);
}
}
static field会有以下的问题。
不能继承基类、实现接口。
无法进行依赖注入。不可以通过参数传递到其他方法。我觉得意义,单例根本不需要传递,单例在哪里都可以直接获取。
不能在其他类中进行测试(mock)。
如何选择?
static成员变量是给不需要状态的情况下使用的,通常只放一堆函数,例如Math和其他Utils类。
Singleton更为的灵活,更容易控制它的状态,可以实现接口,继承自其他类并给其他类继承。
https://stackoverflow.com/questions/47325586/singleton-class-vs-static-methods-and-fields
https://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern
网友评论