3

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

注意:这里的术语“静态工厂方法”取自 Joshua bloch 的 Effective java book,他在其中写道:

执行此操作的类被称为实例控制的。编写实例控制类有几个原因。实例控制允许一个类保证它是单例(第 3 项)或不可实例化(第 4 项)

4

2 回答 2

2

它们不需要在每次调用时都创建一个新对象”这一行所表达的观点是(与new总是创建一个新对象不同)工厂方法可以以某种更聪明的方式实现,即重用现有对象。

看一下of()Guava 中的工厂方法ImmutableList。这个方法返回“那个”空的不可变列表——每次of()调用都没有必要构造一个新对象,而是总是返回同一个对象。这是安全的,因为任何空ImmutableList实例在功能上都无法与任何其他空实例区分开来。

于 2017-11-22T10:22:45.747 回答
1

静态工厂方法是一种构造方法,它可以返回新实例、替代类型的子类、包装关键日志记录或注册表、将多个项目组合到一个对象中,或者(可能)返回单个静态实例。

通过任何方式获得的单例总是解析回同一个实例。这意味着没有可变性。

于 2017-10-24T17:20:13.953 回答