序言
书中所提到的静态工厂方法基本说明是 通过一个方法转换为需要的引用对象
就例如Boolean中的 valueOf
方法
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
...
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
通过 valueOf
方法返回一个Boolean的一个引用对象。
优缺点
这样做的好处什么? 可以总结为以下几条:
- 与构造器的方式不同的是他们有名称,可以更清楚这方法用来构造什么样的对象。
- 如果程序经常请求创建相同的对象,我们知道常见对象的代价是比较高的,这时候呢使用静态方法构建类似于享元(Flyweight)模式。
- 可以返回原返回类型的任何子类对象。
- 可以通过方法的参数来决定静态工厂的返回值。
- 方法返回对象所属的类,在编写包含该静态工厂方法类时可以不存在。
- 可以很方便的时候用lambda表达式
当然书中也举出了这种方式的一些缺点
- 类如果不包含公有的或保护的构造器,就不能将他们子类化。
- 文档注释写的不好,很多人都不会知道他是干嘛的。
实际工作中还是看有什么样子的场景来选取如何构造。