单例模式VS静态方法 - 起帆的博客 | Undervoid Blog
如果你的单例类并没有保存任何状态性质的属性,而只是提供了一些公共方法,那么就应该考虑包含静态方法的类,因为 Java 在编译期的静态绑定特性,静态方法比单例类要快很多。但是请记住,在静态类中维护状态并不是一种推荐的做法,尤其是在并发执行的环境中,因为在多线程运行修改静态变量的状态时,如果不能正确地处理线程之间的关系,这可能会导致由于条件竞争而出现莫名其妙的问题。
另外,当你需要把一系列的 util
方法放到一个类当中时,应该用静态方法;除此之外,当你希望只对外提供一种资源访问的方式,那么就应该使用单例模式
这是我们的第二个关于单例和静态之间关系的问题。我之前说过,他们之间最本质的区别就是,一个代表对象,而另一个代表方法。下面是 Java 当中二者之间的其他不同之处。
(override)
。因为 Java
中的静态方法是不能被覆写的,这就导致某些情况不够灵活。而你随时可以继承一个非 final
的单例类来覆写其中的方法。mock
,因此也更难被测试。而单例类很容易被 mock 来执行单元测试。在使用 Junit
的时候,你可以更简单地为构造方法或普通方法传入单例类的 mock 对象来执行测试用例。当你需要一个具有面向对象特性的类的时候,就用单例模式;而如果你只是把一些静态方法放到一个类中,那就用静态类。
下一篇:Go 反射