0
A
回答
2
辛格尔顿仍然是一个超级有用的模式,与弊端在这个线程指出:
What is so bad about singletons?
它们通常用作全局实例,这是为什么这么差? 因为您将应用程序的依赖关系隐藏在您的 代码中,而不是通过接口公开它们。全球范围内制作东西以避免传递它是一种代码味道。
他们违反单一责任原则:凭借其控制自己的创作和生命周期的事实。
它们固有地导致代码紧密耦合。这使得在很多情况下伪装 他们很难。
它们在应用程序的整个生命周期中都带有状态。另一个 碰到测试,因为你可以结束的情况下,测试需要订购 这是一个很大的单元测试不是没有。为什么?因为每个 单元测试应该是相互独立的。
大部分的批评似乎在非常老式执行单例模式,在那里它们被全局创建的必须指出:
public class ClassicSingleton {
private static ClassicSingleton instance = null;
protected ClassicSingleton() {
// Exists only to defeat instantiation.
}
public static ClassicSingleton getInstance() {
if(instance == null) {
instance = new ClassicSingleton();
}
return instance;
}
}
使用依赖注入容器(如角或春天)克服了上述大多数反对意见。容器处理生命周期并将单例实例注入客户代码。为了测试目的,您可以随时使用不同的单身人员替换注入的单身人士。
简而言之,使用DI容器可以很容易地使用单身人士,而不会产生潜在的不良影响。
相关问题
- 1. 角度2单身服务不作为单身人士
- 2. 什么是单声道单身人士?
- 3. 如果父对象不是单身人士,那么孩子是单身人士?
- 4. servlet是单身人士吗?
- 5. 由Singleton包装的单身人士或非单身人士
- 6. 名单<Class>单身人士,这是甚至良好的做法?
- 7. 带代表的单身人士:好主意还是坏主意?
- 8. ASP.NET中的单身人士
- 9. 单身人士的后果
- 10. Python中的单身人士
- 11. 单身人士 - 是否有用
- 12. 这是如何推动单身人士?
- 13. JDBC连接池是单身人士吗?
- 14. 为什么JavaFX是单身人士?
- 15. 单身人士破坏者
- 16. 单身人士目标C
- 17. 单身人士和常量
- 18. 单身人士在di.dart
- 19. 继承单身人士
- 20. AFNetworking和单身人士
- 21. 提升单身人士
- 22. 单身人士和范围
- 23. ThreadLocal与单身人士
- 24. 单身人士和DbSimple
- 25. 单身人士和例外
- 26. MIDlet作为单身人士
- 27. 单身人士和线程
- 28. 更好的想法比单身人士使用全局变量
- 29. iPhone上单身人士和通知的最佳做法
- 30. 关于双重检查单身人士
这听起来更像是逻辑谬误,而不是一个真正的问题。 – estus
这是一个基于意见的相当大胆的陈述。我不认为每个开发人员都会同意Singletons不好。如果使用得当,它们可能非常有用(我的观点)。 – EJK
你的比较是错误的!单身人士只能解决角度服务在资源争用中起作用的一个问题。 – hyphenbash