程序设计之单例模式 VS 静态方法

程序设计之单例模式 VS 静态方法我们在设计程序经常会有这种需求 某个类里的方法能够全局访问 在这种情况下有两种实现方案 1 gt 单例模式 Singleton 2 gt 静态方法 但是 对于这两种实现方式 那种更好呢 在国内论坛上看了一下其他的一些看法 http hi baidu com jiangzhong87 item c8b66e3d6afd

我们在设计程序经常会有这种需求 , 某个类里的方法能够全局访问. 在这种情况下有两种实现方案 : 

1>单例模式(Singleton);

2>静态方法.

但是, 对于这两种实现方式 , 那种更好呢?

在国内论坛上看了一下其他的一些看法 : 

http://hi.baidu.com/jiangzhong8715/item/c8b66e3d6afd2f677c034b07 : 

 

在国外一些论坛的看法(重点) : 

http://javarevisited.blogspot.com/2013/03/difference-between-singleton-pattern-vs-static-class-java.html

但是该连接好像只能翻墙才能查看. 故再次给大家做一个翻译(翻译的不好之处请多批评指正) : 

在这边文章中有两个术语 : 单例和静态类(所有的方法成员都是静态的) , 下面只给大家说说该文章的重点 : 

1>什么时候使用静态类代替singleton : 

这里有几个很好的静态类比singleton更好的应用场景. 最基本的例子就是在Java中的java.lang.Math类的实现方式, Math类就是用过静态方法来实现的,而不是单例来实现的.

总结 : 

如果你的singleton不提维持任何状态, 仅仅是提供全局的访问 , 这个时候就适合用静态类 , 这样速度也更快, 因为static bind在编译期间(compile during) . 记住不经意维持子类的状态 , 尤其是在并发的情况下, 多个线程并发修改,这容易导致不容易发现的race condition 关于race condition .

 

静态类适用于一些工具类 , 其他的如单个访问资源就可以用singleton.

2>静态类和singleton之间的区别 : 

① static类有更好的访问效率(Static class provides better performance than Singleton pattern, because static methods are bonded on compile time)

③ singleton比static class更容易测试. 那个容易模拟(mock), 哪个就容易测试. singleton很容易用JUnit测试, 因为你能够传递mock对象, 当singleton需要的时候(作为方法参数或者构造函数参数),

④ 如果你的需求是维护(maintain)状态, 那么singleton比static class更好 , 如果使用static class会出现一些问题.

⑤ singleton支持延迟加载 , 而static class 则不支持这样的特性 , 在重量级的对象, 延迟加载就显得非常重要.

⑥ 在一些依赖注入(Dependency injection framework)的框架 , 它能够很好的管理singleton对象 . 例如Spring.

 

3>singleton相对于静态类的一些高级特点 : 

singleton 对于static class 主要的优点是更加面向对象 . 对于singleton你可以使用继承(Inheritance)和多态(polymorphism)来继承一个基类, 实现一个接口, 提供不同功能 的实现. 例如 , Java中java.lang.Runtime ,该类就是一个singleton的, 调用getRuntime(),基于不同的JVM ,返回不同的实现对象, 针对一个一个JVM,确保只有一个Runtime对象 , 如果使用static class就不能很好的来实现这样的功能了 . 

欢迎转载 转载请注明出处 : http://blog.csdn.net/johnny/article/details/

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223703.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:36
下一篇 2026年3月17日 下午1:36


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号