1.|1. 考虑使用静态工厂方法代替构造方法 2019-11-08

1. 静态工厂方法例子: 如Boolean类中的valueOf(boolean b) 方法

/** * The {@code Boolean} object corresponding to the primitive * value {@code true}. */ public static final Boolean TRUE = new Boolean(true); /** * The {@code Boolean} object corresponding to the primitive * value {@code false}. */ public static final Boolean FALSE = new Boolean(false); //...中间代码省略//静态工厂方法 @HotSpotIntrinsicCandidate public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); }

注意:
静态工厂方法与工厂方法模式不同,类可以直接提供静态工厂方法,而不是公共的构造方法。
2. 使用静态工厂方法代替构造方法的优缺点 2.1 优点 (1). 静态工厂方法不像构造方法,它们是有名字的。(属于类的方法)
(2). 静态工厂方法与构造方法不同,他们被调用时不需要每次都创建一个对象。例如调用Boolean.valueOf(true)方法,返回的是Boolean类中定义的静态不变属性TRUE对象;
(3). 静态工厂方法与构造方法不同,他们可以返回任意对象,构造方法只能返回当前类的对象。
(4). 静态工厂方法返回对象的类可以根据输入类型不同而不同。例如使用泛型。
(5). 在编写该方法的类时,返回的对象的类不需要存在。(static关键字的作用)
2.2 缺点 (1). 只提供静态工厂方法、没有提供公共或者受保护的构造方法时不能被子类化。(主要限制)
(2). 静态工厂方法并不像构造方法那样突出、不容易被程序员阅读。
2.3 总结 【1.|1. 考虑使用静态工厂方法代替构造方法 2019-11-08】静态工厂方法和公共构造方法都有他们的用途,并且了解他们的相对有点时值得的。通常,静态工厂方法更可取,因此避免在没有考虑静态工厂方法的情况下、提供公共构造方法。

    推荐阅读