为什么使用工厂而不是 'new'?

Why use a factory instead of 'new'?

我正在阅读 EMF: Eclipse Modeling Framework 这本书,其中写道:

The EMF programming model strongly encourages, but doesn’t require, the use of factories for creating objects. Instead of simply using the new operator to create [an object]...

为什么比 new 更鼓励使用工厂?

您的答案不必特定于 EMF,只要它与 Java.

有关即可

您可以阅读 Effective Java 第 1 条:考虑静态工厂方法而不是构造函数。它详细描述了使用工厂方法的优点:

  • 静态工厂方法的一个优点是,与构造函数不同,它们 有名字

  • 静态工厂方法的第二个优点是,与构造函数不同, 他们不需要在每次调用时都创建一个新对象。

  • 静态工厂方法的第三个优点是,与构造函数不同, 他们可以 return 其 return 类型的任何子类型的对象。

  • 静态工厂方法的第四个优点是它们减少了创建参数化类型实例的冗长(自 Java 7 以来似乎已经过时)

主要是创建对象的简单性。从工厂调用方法比记住构造函数中每个参数的含义要容易得多+它使代码更改更容易

这里的回答也不特定于 Java。

  1. 工厂方法有名字,更容易记忆,更不容易出错。
  2. 它们不需要每次调用都创建一个新的实例,你可以使用预先构造的类并在此处缓存。
  3. 他们可以 return 任何子类型的对象,而不仅仅是 new
  4. 中调用的对象
  5. 您可以参数化调用 "new" 对象。

我几乎同意这里给出的每一个答案,但这些论点通常适用于 Java 中的每一种情况,但是在 EMF 的这种特殊情况下还有另一个额外的原因:EMF 有它自己的内省机制,它例如,用于不依赖于 Java 反射的序列化和反序列化。

对于反序列化,例如,它读取 XML 文件,并使用 Ecore 模型信息和相应的工厂实例化 Java 对象。否则它需要使用 Java 反射。