为什么java.lang.Runtime是单例的?单身要求?
我只是想提出开发人员可能需要使用Singleton类的用例。这是:-为什么java.lang.Runtime是单例的?单身要求?,java,design-patterns,singleton,Java,Design Patterns,Singleton,我只是想提出开发人员可能需要使用Singleton类的用例。这是:- 当我们需要保持资源之间的同步时。对于 例如,在日志记录的情况下,多个线程需要写入单个线程 按顺序记录文件。这里,单例有助于同步 不同线程之间需要,以便它们在单个文件中写入 按顺序 当对象创建本身是昂贵的,这意味着它需要时间 消费操作。例如:-在以下位置休眠工厂创建: 启动。我不是说每种情况都是这样,而是说 是的,在某些情况下,当需要相同的状态时,单例在这里是有帮助的 跨应用程序和对象创建共享的成本很高 对于业务服务对象,sin
运行时
是单例的
即使产生越来越多的线程,处理器的数量、总RAM等也不会改变。因此,使运行时
成为一个单实例可以避免创建一个包含与1000个其他线程相同信息的对象,从而优化程序的执行
这是我对它的理解。单身是邪恶的。它们实际上是伪装的全局变量。对于单元测试来说,它们尤其糟糕,因为一旦单例被类加载器加载,它的行为就被修复了,所以您不能模拟它。您的代码将被修复为永远调用该依赖项 更好的方法是使用依赖注入将依赖注入到需要的地方,或者通过代码将依赖传递到需要的地方 阅读:
你也会问自己,为什么你会想使用单身。一个单例意味着一个实例,但它实际上意味着每个类加载器一个实例。这可能不是你真正想要的解决方案 在同一个Java进程中实例化一个新的
运行时
意味着什么?Singleton类使一个类通常所有内容都是静态的,并将其转换为一个对象。“好处是它现在可以传递到事物中去了。”乔什利看一下我的答案。这不是你的问题所暗示的吗?=)@是的,我的问题是修辞性的,不是静态的。它仍然是对实例的调用,但仅对一个实例进行调用。仍然是实例调用,而不是类上的静态调用。+1但与每个规则一样,都有例外。一个单例适用于运行时,因为整个JVM只能有一个单例。这并不能回答这个问题。看起来像是复制粘贴,不是复制粘贴。我首先质疑使用单例的理由。大多数情况下,你不需要一个单身汉,它带来的问题比它解决的要多。提出的另一点是,单例可以用作某种形式的优化,以防止重复创建昂贵的对象。如果采用依赖注入,这也不是问题。依赖注入并不总是世界上所有问题的唯一解决方案。若运行时不是单例的,并且有人可以在它的位置注入其他东西,那个么它将不会给出正确的结果。依赖注入适用于您的应用程序的测试能力,而不是整个平台。如果你想要一个虚拟的解决方案,你可以构建你自己的IRuntime并在你的应用程序中使用它。你认为你没有抓住要点。在没有DI的情况下通常使用的单例是全局变量,因为它们只能通过全局范围访问。我没说DI是一个银弹解决方案。不过,DI是一个更好的解决方案,因为它将这种依赖性外部化。否则,您就有一个永远不会改变的隐式内部依赖关系。当然,Sun的API是在DI真正起飞之前设计的,所以当时它可能被认为是个好主意。这当然不是目前的良好做法。我是GOOS的实践者,所以将所有合作者外部化是一个更好的设计IMHO。在这种情况下,Runtome可以将所有方法都作为静态方法,而不是单一方法。不是吗?