单身人士使用静态成员和方法?
这个问题在这里已经有了答案:
您不能使用此模式为某个接口实现提供者,也不能使用子类或其他替代行为。 这意味着测试变得更加困难,并且不能对静态类所做的任何事情使用依赖注入。
单例是一个类的单个实例(即,一个对象)。 一块静态代码不是一个对象。 这只是代码。
这似乎有一个明确的区别:
public class MyClass {
public static void doIt() {
System.out.println("doIt()");
}
}
和这个:
public class MySingleton {
private static MySingleton _singleton = null;
private String cantTouchThis;
private MySingleton() {
cantTouchThis = "Hands off, static block!";
}
public static MySingleton newInstance() {
if (_singleton == null) {
_singleton = new MySingleton();
}
return _singleton;
}
}
在第一种情况下,基本上所有的都是可以通过调用MyClass.doIt()来执行的代码块。 在第二种情况下,通过调用MySingleton.newInstance(),您可以实现一个诚实善良的对象。
HTH
除了序列化以外,单元测试这样的“单例”是一种潜在的缺点。
将这与单元测试一个真实的(即可实例化的)单例进行对比。
最终,单例保证一个类的单个实例,而静态类是不可实例化的,因为@JStevenPerry指出(我希望你已经理解了):尽管它们在很多方面可以被类似地使用,但它们并不相同。
链接地址: http://www.djcxy.com/p/78821.html