【发布时间】:2015-05-30 06:42:53
【问题描述】:
我正在阅读这本书 EMF: Eclipse Modeling Framework,其中写着:
EMF 编程模型强烈鼓励但不要求, 使用工厂来创建对象。而不是简单地使用 new 运算符来创建[一个对象]...
为什么鼓励使用工厂而不是new?
您的答案不必是特定于 EMF 的,只要它与 Java 有关即可。
【问题讨论】:
标签: java eclipse eclipse-emf emf eclipse-emf-ecore
我正在阅读这本书 EMF: Eclipse Modeling Framework,其中写着:
EMF 编程模型强烈鼓励但不要求, 使用工厂来创建对象。而不是简单地使用 new 运算符来创建[一个对象]...
为什么鼓励使用工厂而不是new?
您的答案不必是特定于 EMF 的,只要它与 Java 有关即可。
【问题讨论】:
标签: java eclipse eclipse-emf emf eclipse-emf-ecore
这里的答案也不特定于 Java。
new 中调用的对象
【讨论】:
您可以阅读有效的 Java 第 1 条:考虑静态工厂方法而不是构造函数。它详细描述了使用工厂方法的优点:
静态工厂方法的一个优点是,与构造函数不同,它们 有名字
静态工厂方法的第二个优点是,与构造函数不同, 它们不需要在每次调用时都创建一个新对象。
静态工厂方法的第三个优点是,与构造函数不同, 它们可以返回其返回类型的任何子类型的对象。
静态工厂方法的第四个优点是它们减少了创建参数化类型实例的冗长性(自 Java 7 以来似乎已经过时)
【讨论】:
我同意这里给出的所有答案,但这些论点通常适用于 Java 中的每种情况,但是在 EMF 的这种特殊情况下还有另一个额外的原因:EMF 有自己的自省机制,例如,用于序列化和反序列化,不依赖于Java反射。
例如,对于反序列化,它读取 XML 文件,并使用 Ecore 模型信息和相应的工厂实例化 Java 对象。否则需要使用 Java 反射。
【讨论】:
主要是创建对象的简单性。从工厂调用方法比记住构造函数中每个参数的含义要容易得多+它使代码的更改更容易
【讨论】: