第2章 创建和销毁对象

。_饼干妹妹 提交于 2020-02-07 23:48:03

第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 文档中明确标识出来,对于提供了静态工厂方法而不是构造器的类来说,要想查明如何实例化类是非常困难的

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!