Dra*_*orn 20 java singleton design-patterns
目前我对这种"设计模式"非常感兴趣.我不确定是否有使用这种严格的全局状态实施的垮台.那么,你认为什么时候不在应用程序中练习单身?
Jef*_*ron 37
如果您正在进行单元测试,单身通常是一个坏主意,而且通常不做单元测试(或BDD或验收测试)也是一个坏主意.
使对象具有全局状态意味着您编写的涉及这些对象的单元测试将被隔离并且彼此不相交.相反,你将不得不担心重置每个测试的状态,并相信我......这种情况从未100%完成.如果您没有重置全局状态,那么您开始变得非常奇怪并且很难在您的测试中调试浪费时间的错误.
全局状态也会增加代码中的耦合并使其很难重构.
理想的方法是使用IoC/DI容器(Spring,Guice等)来请求对象.这些容器通常有使对象显示为"单身人士"的方法,但他们也有办法根据情况修改该行为(即单元测试与域代码).
这一切都取决于你的问题的大小当然.如果你正在组织一个4级试验台试试看,那就继续使用Singleton.然而,只要该项目具有生命并且变得更大,更复杂,那么重构单身人士.
除了其他帖子中提到的测试和设计问题之外,单身人士和类加载器也存在问题.单身者并不是每个JVM或应用程序真正"单一" - 他们通过静态属性实现这一点,这实际上意味着每个类都有一个.如果有多个类加载器 - 就像在大多数应用服务器中一样 - 每个单独的应用程序都会获得一个新的类加载器,甚至在EJB中使用多级类加载器.每个类加载器加载一个单例实例 - 这取决于你对单例执行的操作,可能无法产生预期的结果.