Effective Java-创建和销毁对象

本文探讨了Java设计模式中的关键概念,包括使用静态工厂方法替代构造器的优势、Builder模式的应用场景及其优缺点、如何实现Singleton模式及不可实例化的类等。此外还讨论了避免不必要的对象创建和终结方法的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、考虑用静态方法代替构造器
  类可以通过静态工厂方法来提供它的客户端,而不是通过构造器。
优势:
  1、它们有名称,可以根据名称将创建对象的行为表达的更清楚。
  2、可以不必在每次调用它们的时候都返回一个新对象。这使得不可变类可以使用预先构建好的实例,或者将构建好的实例缓存起来,进行重复利用。
  3、它们可以返回原返回类型的任何子类型的对象。API可以返回对象,同时又不会使对象的类变成公有的。以这种方式隐藏实现细节。
  4、在创建参数化实例的时候,它们使代码变得简洁。
缺点:
  1、类如果不含公有的或者受保护的构造器,就不能被子类化。
  2、它们与其它的静态方法实际上没有任何区别。

二、遇到多个构造器参数时要考虑使用构建器。
  重叠构造器模式可行,但是当有许多参数的时候,客户端代码会很难编写,并且难以阅读。一长串类型相同的参数会导致一些微妙的错误。如果客户端不小心颠倒了其中两个参数的顺序,编译器也不会报错,但是程序在运行时会出现错误行为。
  这种情况下,另一种替代方法是使用JavaBean模式。通过setter方法设置必要参数。遗憾的是,这种模式自身有着很重要的缺点。因为构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态。与此相关的另一点不足在于,这种模式阻止了类做成不可变类的可能。
  幸运的事,还有第三种替代方法,就是Builder模式。不直接生成想要的对象,而是让客户端利用必要的参数调用构造器,生成一个Builder对象,然后在Builder对象上调用类似setter的方法,来设置每个相关的值。最后,客户端利用无参的builder方法生成不可变对象。这种方式对于参数的增加比较灵活,易于阅读,可以对参数增加约束条件。它也有自身的不足,比如在某些十分注重性能的情况下,它的开销可能就成问题了。该模式比重叠构造器更加冗长,因此它只有在很多参数的时候才使用,特别是当大多数参数是可选的时候。

三#、用私有构造器或者枚举类型强化Singleton属性
  

四、通过私有构造器强化不可实例化的能力。
  对于不可实例化的类,将它的构造器变成私有的。比如只包含静态方法和静态域的类。

五、避免创建不必要的对象
  本条目并不意味着“我们应该要尽可能地避免创建对象”。由于小对象的构造器只做很少量的显示工作,创建和回收动作是非常廉价的。反之,通过维护对象池来避免创建对象并不是一个很好的做法,除非池中的对象是重量级的(典型例子就是数据库连接)。

六*、消除过期的对象引用
  

七#、避免使用终结方法
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值