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

时间:2015-03-26 09:44:47

标签: java eclipse eclipse-emf emf eclipse-emf-ecore

我正在阅读其中陈述的书EMF: Eclipse Modeling Framework

  

EMF编程模型强烈鼓励但不要求,   使用工厂来创建对象。而不是简单地使用   用于创建[对象]的新运算符...

为什么鼓励使用工厂而不是new

您的答案不一定是EMF特定的,只要它与Java有关。

4 个答案:

答案 0 :(得分:7)

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

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

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

这里的答案也不是特定于Java的。

  1. 工厂方法有名称,更容易记住,并且不易出错。
  2. 他们每次调用时都不需要创建新实例,您可以使用预构建的类并在此处缓存。
  3. 他们可以返回任何子类型的对象,而不仅仅是new
  4. 中调用的对象
  5. 您可以参与调用" new"对象。

答案 3 :(得分:-1)

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

更容易