何时使用构造函数以及何时使用 getInstance() 方法(静态工厂方法)?

2023-12-04

  1. 我们应该何时以及如何使用构造函数

    Foo bar = new Foo();
    
  2. 我们应该何时以及如何使用 getInstance() (静态工厂方法)

    Foo bar = Foo.getInstance();
    

这两者有什么区别?我一直使用构造函数,但是什么时候应该使用getInstance()反而?


每个人似乎都关注单身人士,而我认为问题实际上是关于构造函数与静态工厂方法.

这实际上是第 1 项:考虑静态工厂方法而不是构造函数 of 有效的Java约书亚·布洛赫:

第 1 项:考虑静态工厂方法而不是构造函数

类允许的正常方式 客户端获取自身的实例 是提供一个公共构造函数。 还有另一种技术应该 成为每个程序员的一部分 工具包。一个类可以提供一个公共的静态工厂方法,这只是一个返回一个静态方法 类的实例。这是一个简单的 示例来自Boolean(盒装的 原始类型的原始类boolean)。该方法翻译了一个 布尔原始值转换为Boolean对象参考:

public static Boolean valueOf(boolean b) {
    return b ? Boolean.TRUE : Boolean.FALSE;
}

请注意,静态工厂方法是 不一样工厂方法图案来自设计模式[Gamma95,p。 107]。静态工厂 本项中描述的方法没有 直接等价于设计 图案.

一个班级可以为其客户提供 静态工厂方法而不是,或者 除此之外,还有构造函数。 提供静态工厂方法 而不是公共构造函数 既有优点也有缺点。

优点(引用书中):

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

缺点(依然引用书上的内容):

  • 仅提供静态工厂方法的主要缺点是 没有公共或受保护构造函数的类不能被子类化。
  • 静态工厂方法的第二个缺点是它们不是 很容易与其他静态方法区分开来。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时使用构造函数以及何时使用 getInstance() 方法(静态工厂方法)? 的相关文章

随机推荐