考虑用静态工厂方法代替构造器

阅读Effective java

静态工厂方法的简介

在创建一个类的时候,除了使用公有的构造器,还可以使用公有的静态工厂方法。

Boolean的valueOf方法就是这样的一个例子:

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

使用静态工厂方法的好处:

  • 有名称
  • 不必在每次调用的时候创建一个新对象
    能够为重复的调用返回相同的对象,这样有助于类总能严格控制在某个时刻哪些实例应该存在。这种类被称为实例受控的类
    实例受控的类可以确保它是一个单例类,或是一个不可变的类,或是一个不可实例化的。
  • 返回原返回类型的任何子类型的对象
    由于相当于多了一层包装,所以静态工厂方法可以让返回的内容是任何子类型的对象。
    不仅如此,还可以根据参数来返回不同的内容,比如java.util.EnumSet中的静态工厂方法,这样的好处是易于在发行版本的变更过程中改变返回的内容,提高软件的可维护性和性能。

服务提供者框架:
静态工厂方法返回的对象所属的类,在编写包含该静态工厂方法所属的类时可以不必存在。
JDBC API和现在用的很多的分布式框架Dubbo也基于这样的一个框架原理。
服务提供者框架有三个重要的组件:

  1. 服务接口 ---- 生产者
  2. 提供者注册API ---- 注册中心
  3. 服务访问API ---- 消费者
  • 在创建参数化类型实例时,使代码变得更加简洁

使用静态工厂方法的缺点:

  • 类如果不含有公有的或者受保护的构造器,就不能被子类化
  • 它们和其他的静态方法实际上没有任何区别

posted on 2017-10-14 10:29  evanxwj  阅读(175)  评论(0编辑  收藏  举报