序言

书中所提到的静态工厂方法基本说明是 通过一个方法转换为需要的引用对象
就例如Boolean中的 valueOf 方法

  1. public static final Boolean TRUE = new Boolean(true);
  2. public static final Boolean FALSE = new Boolean(false);
  3. ...
  4. public static Boolean valueOf(boolean b) {
  5. return (b ? TRUE : FALSE);
  6. }

通过 valueOf 方法返回一个Boolean的一个引用对象。

优缺点

这样做的好处什么? 可以总结为以下几条:

  1. 与构造器的方式不同的是他们有名称,可以更清楚这方法用来构造什么样的对象。
  2. 如果程序经常请求创建相同的对象,我们知道常见对象的代价是比较高的,这时候呢使用静态方法构建类似于享元(Flyweight)模式。
  3. 可以返回原返回类型的任何子类对象。
  4. 可以通过方法的参数来决定静态工厂的返回值。
  5. 方法返回对象所属的类,在编写包含该静态工厂方法类时可以不存在。
  6. 可以很方便的时候用lambda表达式

当然书中也举出了这种方式的一些缺点

  1. 类如果不包含公有的或保护的构造器,就不能将他们子类化。
  2. 文档注释写的不好,很多人都不会知道他是干嘛的。

实际工作中还是看有什么样子的场景来选取如何构造。