当前位置: 首页 > 面试题库 >

单例模式有什么不好呢?

益绯辞
2023-03-14
问题内容

该单例模式是一个缴足成员四人帮的模式书,但最近似乎而是由开发者世界孤立。我仍然使用很多单例,尤其是对于工厂类,尽管您必须对多线程问题(实际上是任何类)有所注意,但我看不出它们为什么如此糟糕。

堆栈溢出似乎特别假设每个人都同意Singletons是邪恶的。为什么?

请以“ 事实,参考或特定专业知识 ” 支持您的回答


问题答案:

布赖恩·巴顿(Brian Button)的释义:

  1. 它们通常用作全局实例,为什么这么糟?因为您在代码中隐藏了应用程序的依赖关系,而不是通过接口公开它们。使某些东西全局化以避免传递它是一种代码味道。

  2. 他们违反了单一责任原则:由于他们控制自己的创作和生命周期。

  3. 它们固有地导致代码紧密耦合。在许多情况下,这使得将它们伪装成测试对象相当困难。

  4. 它们在应用程序的整个生命周期中都带有状态。测试的另一个问题是,您可能会遇到需要订购测试的情况,这对于单元测试来说是一个很大的不。为什么?因为每个单元测试都应该彼此独立。



 类似资料:
  • 问题内容: 最近,我遇到了AngularJS Strict DI模式。使用它的目的和好处是什么?通过特别在移动设备上使用它,我们是否可以显着提高性能? 我尝试将其应用于代码,编写代码时未做任何注释。但是,我要压缩代码,并在构建过程中进行ng- annotate。但是,为什么在将严格的DI模式添加到代码中后,仍然出现错误消息“需要显式注释”? 问题答案: 严格的DI模式基本上在运行时发现不符合最小化

  • 问题内容: 我正在学习Spring框架,目前正在阅读有关它的书。在这本书中,它说Spring单例与Java单例不同吗?这是什么意思,有什么区别?谢谢 问题答案: Java单例由Java类加载器确定范围,Spring单例由容器上下文确定范围。 从根本上讲,这意味着在Java中,可以确保单例仅在加载它的类加载器的上下文中才是真正的单例。尽管您在代码中尽力防止它发生,但其他类加载器也应该能够创建它的另一

  • 在单例模式中,我们有一个私有构造函数和一个公共静态方法,如下所示- 当我们需要这个类的对象时,我们可以通过调用静态方法来创建这个类的一个和只有一个实例,比如- 但是我很困惑为什么我们在GetInstance()方法中检查null,因为“_uniqueInstance”已经是一个静态变量,所以它只会被初始化和分配一次内存。即使我们不检查空,仍然用“new”初始化对象,内存也不会再次分配给这个对象,因

  • 本文向大家介绍PHP单例模式是什么 php实现单例模式的方法,包括了PHP单例模式是什么 php实现单例模式的方法的使用技巧和注意事项,需要的朋友参考一下 一、什么是单例模式? 1、含义       作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。 2、单例模式的三个要点: (1).

  • 本文向大家介绍如何开启调试模式?调试模式有什么好处?相关面试题,主要包含被问及如何开启调试模式?调试模式有什么好处?时的应答技巧和注意事项,需要的朋友参考一下 开启调试模式很简单,只需要在入口文件中增加一行常量定义代码: // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define(‘APP_DEBUG’, true); 调试模式的优势在于: 开启日志记录,任何错误信息和调试

  • 本文向大家介绍什么是js的闭包?有什么作用,用闭包写个单例模式相关面试题,主要包含被问及什么是js的闭包?有什么作用,用闭包写个单例模式时的应答技巧和注意事项,需要的朋友参考一下 参考回答: MDN对闭包的定义是:闭包是指那些能够访问自由变量的函数,自由变量是指在函数中使用的,但既不是函数参数又不是函数的局部变量的变量,由此可以看出,闭包=函数+函数能够访问的自由变量,所以从技术的角度讲,所有JS