gpt4 book ai didi

java - 单例和静态工厂方法有什么区别

转载 作者:行者123 更新时间:2023-12-01 14:28:41 26 4
gpt4 key购买 nike

我想知道单例和静态工厂方法是否都只创建一个实例,那么为什么有两个概念用于同一目的?

注意:这里的术语“静态工厂方法”取自 Joshua bloch 所著的 Effective java book:

“静态工厂方法的第二个优点是,与构造函数不同,它们不需要在每次调用时都创建一个新对象。这允许不可变类(条目 15)使用预构造的实例,或缓存实例Boolean.valueOf(boolean) 方法说明了这种技术:它从不创建对象。这种技术类似于 Flyweight 模式 [Gamma95, p. 195]. 如果经常请求等效对象,尤其是创建它们的成本很高时,它可以大大提高性能。静态工厂方法从重复调用中返回相同对象的能力允许类在任何时候保持对存在的实例的严格控制。执行此操作的类被称为实例控制的。编写实例控制的类有几个原因。 实例控制允许类保证它是单例(第 3 项)或不可实例化(第 4 项)

最佳答案

他们不需要在每次被调用时都创建一个新对象”这一行表达的意思是(不像 new总是创建一个新对象)工厂方法可以通过重用现有对象的更聪明的方式实现。

看看 of() Guava 中的工厂方法 ImmutableList .此方法返回“the”空的不可变列表 - 每次调用 of() 时构造一个新对象是没有意义的,而是总是返回同一个对象。这是安全的,因为任何空的 ImmutableList 实例在功能上都与任何其他空实例没有区别。

关于java - 单例和静态工厂方法有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46876758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com