创建和销毁对象

本章的主题是创建和销毁对象:何时以及如何创建对象,何时以及如何避免创建对象,如何确保它们能够适时地销毁,以及如何管理对象销毁之前必须进行的各种清理动作。

第一条:用静态工厂方法代替构造器

静态工厂方法与构造器不同的第一大优势在于,它们有名称。如果构造器的参数本身没有确切地描述正被返回的对象,那么具有适当名称的静态工厂会更容易使用,产生的客户端代码也更易于阅读。

静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创
建一个新对象。
静态工厂方法能够为重复的调用返回相同对象,这样有助于类总能严格控制在某个时·刻哪些实例应该存在。

静态工厂方法与构造器不同的第三大优势在子,它们可以返回原返回类型的任何子类型的对象。这样我们在选择返回对象的类时就有了更大的灵活性。

静态工厂的第四大优势在于,所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值。只要是已声明的返回类型的子类型,都是允许的。返回对象的类也可能随着发行版本的不同而不同。

静态工厂的第五大优势在于,方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在。这种灵活的静态工厂方法构成了服务提供者框架( Service ProviderFramework)的基础,例如JDBC(Java 数据库连接)API 。服务提供者框架是指这样一个系统:多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把它们从多个实现中解稠出来。

静态工厂方法的主要缺点在子,类如果不含公有的或者受保护的构造器,就不能被子类化。例如,要想将Collections Framework 中的任何便利的实现类子类化, 这是不可能的。但是这样也许会因祸得福,因为它鼓励程序员使用复合(composition ),而不是继承,这正是不可变类型所需要的 。

静态工厂方法的第二个缺点在于,程序员很难发现它们。在API 文档中,它们没有像构造器那样在API 文档中明确标识出来, 因此对于提供了静态工厂方法而不是构造器的类来说,要想查明如何实例化一个类是非常困难的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容