【发布时间】:2011-09-01 09:55:00
【问题描述】:
在过去的几个小时里,我一直在阅读有关单例模式以及为什么不使用它的信息,以及其他一些非常好的网站:
- Singleton I love you, but you're bringing me down
- How to Think About the "new" Operator with Respect to Unit Testing
- Where have all the Singletons Gone?
我想你们很多人已经知道这些了。
阅读我的代码后,我显然是误解和误用单例模式的可能 95% 的程序员之一。
在某些情况下,我可以清楚地删除模式,但在某些情况下我不确定该怎么做:
我知道单例日志是被接受的,原因之一是信息只流入它们而不返回应用程序(当然只是流入日志文件或控制台等)。
其他不符合该标准但很多课程都需要的课程呢?
例如,我有一个很多类都需要的设置对象。很多,我的意思是超过 200 个。
我已经阅读了其他一些 SO 问题,例如 "Singletons: good design or a crutch?",他们都指出了为什么不鼓励使用单例。
我理解其中的原因,但我仍然有一个主要问题:
如果不使用单例模式,我如何设计一个需要单个实例且可从任何地方访问的类?
我能想到的选项是:
- 改用静态类(虽然我看不出这会更好,看看 OOP 和单元测试)。
- 在 ApplicationFactory 中创建它并对每个需要它的类执行依赖注入(请记住,在某些情况下它是 200+)。
- 无论如何都要使用单例,因为全局访问红利超过了这种情况下的劣势。
- 完全不同的东西。
【问题讨论】:
-
我投票给#2 和/或#3,因为我也没有最终答案。好的 #4 也是一个选项 :-)
标签: oop design-patterns singleton global