-
什么是静态工厂方法?
通常我们获取类的实例是采用new,通过构造方法获取一个实例。除此以外,我们还能够用一个静态方法来对外提供自身实例,即静态工厂方法。 -
静态工厂方法的优势
2.1 静态工厂方法可以有自己的名称
构造方法与类同名,当出现多个重载的构造方法时区别仅在参数列表,用户易于混淆。而静态工厂方法可以为不同的参数列表定义不同的名称,突出不同静态工厂方法之间的区别。2.2 不必每次调用时都创建一个新对象
有时候外部调用者只需要拿到一个实例,而不关心是否是新的实例;又或者我们想对外提供一个单例时 —— 如果使用工厂方法,就可以很容易的在内部控制,防止创建不必要的对象,减少开销。2.3 可以返回原返回类型的子类
这使我们在选择返回对象的类时有了更大的灵活性。尤其时对于基于接口的框架,Java8以后接口可以有静态方法,那么我们就可以直接通过接口来引用被返回的对象。2.4 所返回的对象的类可以随着每次调用的变化而变化
根据不同的参数值返回不同的结果,只要是声明的返回类型的子类都可以,具体的实现过程不可见。这允许开发者后续对类的实现进行修改而不造成负面结果。2.5 方法返回的对象所属类,在编写该静态方法时可以不存在。
这种灵活的特性构成了服务提供者框架的基础。 -
静态工厂方法的缺点
如果一个类不含有公共或被保护的构造器,就不能被子类化。此外,相比于构造器,静态工厂方法在API文档中没有明确标识,不易被程序员所察觉。