慎用Singleton模式!

看到版上这么多人不厌其烦的讨论Singleton模式, 忍不住想说两句. 虽然Singleton用起来方便但负面作用也是很明显的.

最大的两个副作用就是:

  1. Singleton隐藏了依赖, 在单元测试时无法动态替换. 如果单例对象启动很慢的话, 那单元测试就很费时了.
  2. 模糊了'唯一性'的范围. Singleton宣称对象是单例, 却疏忽了一个前提, 那就是单例的范围. 我们说'唯一', 一定要指明是在那个范围之内唯一, 是全球唯一, 一台机器上唯一, 一个用户会话内唯一, 一个进程内唯一还是一个AppDomain内唯一? .NET的Singleton的范围是AppDomain. 所以要实现其他范围内的唯一就得用其他手段了.

这里有篇文章: Why Singletons are Evil

http://blogs.msdn.com/b/scottdensmore/archive/2004/05/25/140827.aspx

原文地址:https://www.cnblogs.com/mrfangzheng/p/1809834.html