Effective Java (高效 Java) 第三版-考虑使用静态工厂方法替代构造方法

Effective Java (高效 Java) 第三版-考虑使用静态工厂方法替代构造方法

Laughing
2022-07-31 / 0 评论 / 1,001 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年07月31日,已超过901天没有更新,若内容或图片失效,请留言反馈。
public static Boolean valueOf(boolean b) {
    return b ? Boolean.TRUE : Boolean.FALSE;
}

静态工厂方法的优点

  • 构造方法没有名字,但是静态工厂方法是有名字的

如果构造方法的参数本身并不描述被返回的对象,则具有精心选择名称的静态工厂更易于使用,并且生成的客户端代码更易于阅读。

  • 不需要每次调用时都创建一个新对象
  • 可以返回其返回类型的任何子类型的对象

这种灵活性的一个应用是 API 可以返回对象而不需要公开它的类。 以这种方式隐藏实现类会使 API 非常紧凑。

  • 返回对象的类可以根据输入参数的不同而不同

声明的返回类型的任何子类都是允许的。 返回对象的类也可以随每次发布而不同。

  • 在编写包含该方法的类时,返回的对象的类不需要存在

这种灵活的静态工厂方法构成了服务提供者框架的基础,比如 Java 数据库连接 AP(JDBC)。服务提供者框架是提供者实现服务的系统,并且系统使得实现对客户端可用,从而将客户端从实现中分离出来。

静态工厂方法的缺点

  • 没有公共或受保护构造方法的类不能被子类化

要想将Collections框架中任何遍历的实现类进行子类化,是不可能的。

  • 程序员很难找到它们

它们不像构造方法那样在 API 文档中明确的标注出来。因此,对于提供了静态方法而不是构造器的类来说,想要查明如何实例化一个类是十分困难的。

0

评论 (0)

取消