第二章 创建和销毁对象
第一条:用静态工厂方法代替构造器
- 优势
- 与构造器相比,它们有名称 。
- 不用在每次调用它们的时候都创建一个新对象。
- 它们可以返回原返回类型的任何子类型的对象。
- 所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值。
- 方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在。(构成了服务提供者框架的基础,例如JDBC的API)
- 缺点
- 类如果不含公有的或者受保护的构造器,就不能被子类化
- 程序员很难发现它们
第二条:遇到多个构造器参数时要考虑使用构造器
静态工厂和构造器有个共同的局限性:它们都不能很好地拓展到大量的可选参数。
通常的构造器模式有:
- 重叠构造器(telescoping constructor)模式,参数多时编写、阅读困难。
- JavaBeans模式,setter设置每个参数,但在构造过程中JavaBean可能处于不一致状态,并且把类做成不可变的可能性不复存在。
- 建造者(Builder)模式,它不直接生成想要的对象,而是让客户端利用必要的参数调用构造器(或者静态工厂)得到一个builder对象,然后客户端在builder对象上调用类似setter的方法,来设置每个相关的可选参数。最后客户端调用无参的build方法来生成通常是不可变的对象。
简而言之,如果类的构造器或者静态工厂中具有多个参数,设计这种类时,Builder模式就是一种不错的选择。