第1条 用静态工厂方法代替构造器
优点
1.静态工厂方法与构造器不同的第一大优势在于,他们有名称
2.不必每次调用他们都创建一个新对象,如Boolean中的valueof,都是内部自己维护的两个单例,根据传入的参数不同,分别返回True或者False
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);
3.返回原返回类型的任何子类型的对象,API可以返回对象,同时又不会使对象的类变成公有(这里理解为Collections【Collections的构造器为private】中的东西,里面有很多静态内部类,通过暴露静态公有的方法创建无法new出来的对象)
4.所有返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值
5.方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在(理解为解耦,可以先没有具体的实现类,如JDBC返回Connection)
缺点
1.类如果不含有公有的或者受保护的构造器,就不能被子类化(可能意思是如果构造函数私有,那么无法通过静态方法创建对象,而需要类自己去创建然后暴露给外部)
2.程序员很难发现他们,API 文档中,它没有像构造器那样在 API 文档中明确标识出来,对于提供了静态工厂方法而不是构造器的类来说,要想查明如何实例化类是非常困难的
来源:CSDN
作者:ZQHcode
链接:https://blog.csdn.net/qq_43517649/article/details/104215145