java工厂方法 - 静态工厂方法是什么




对象的创建:构造函数或静态工厂方法 (2)

我正在浏览Effective Java ,而我认为我所认为的标准的一些东西并没有被这本书所建议,例如创建对象,我的印象是,构造函数是最好的方式,书本说我们应该使用静态的工厂方法,我不能有几个优点和缺点,所以问这个问题,这里是使用它的好处。

优点:

  1. 静态工厂方法的一个优点是,不像构造函数,它们有名字。
  2. 静态工厂方法的第二个优点是,不像构造函数,每次调用时都不需要创建一个新的对象。
  3. 静态工厂方法的第三个优点是,与构造函数不同,它们可以返回其返回类型的任何子类型的对象。
  4. 静态工厂方法的第四个优点是它们减少了创建参数化类型实例的冗长性。

缺点:

  1. 仅提供静态工厂方法的主要缺点是没有公共或受保护的构造函数的类不能被子类化。
  2. 静态工厂方法的第二个缺点是它们不容易与其他静态方法区分开来。

参考文献:Effective Java,Joshua Bloch,第2版,第5-10页

我无法理解第四个优点和第二个劣势,如果有人能够解释这些问题,我将不胜感激。 我也想了解如何决定是否使用构造函数或静态工厂方法来创建对象。


缺点2。

用于创建对象的静态方法与其他静态函数具有相同的功能布局和外观。

只要看一个创建对象的静态方法,你就不会知道它是这样做的,而相反的是相关的部分。 在编写您不熟悉的代码时,可能很难确定用于创建对象的正确的静态方法。

静态工厂模式的使用是有据可查的,可以是非常有用的,特别是在单身Multiton的情况下。 在复杂对象的初始化中也是有用的。


如果你知道你正在创建的类的具体类型,那么调用构造函数就可以了。

静态工厂方法很好,当你不完全确定如何构建你需要的对象。

工厂方法仍然在具体类型上调用构造函数,但是该方法处理决定什么样的具体类实例化。 工厂方法然后返回一个接口类型(而不是一个具体的类型),这样的具体类型是从调用者隐藏。





constructor