Effective Java---学习笔记

一.用静态工厂方法代替构造器

我们工作中创建对象最常用的方式是通过构造器,书中提出使用静态工厂方法创建对象也是一种不错的方式。

静态工厂方法:返回类的实例(对象)的静态方法(静态方法、方法返回值是目标类的实例)

1 public static Boolean valueOf(boolean b) {
2     return (b ? TRUE : FALSE);
3 }

类可以通过静态工厂方法对外提供实例而不必由外部调用类的构造器,使用静态工厂方法的几个优势:

  1.静态工厂方法有名称,构造器的名称都一样仅仅参数签名不同:静态工厂方法可以通过命名来区分API,而构造器只能通过参数签名来区分API,相比较而言通过方法名称可以更清晰直白的表达API。比如有两个参数签名一样的构造器,就只能改变参数的顺序来区分它们。

  2.静态工厂方法不必每次调用都创建一个新对象:每次通过构造器new出的对像都是一个新对象,对于经常创建相同且创建代价高的情况使用静态工厂方法可以每次都返回同一个对象,极大的提升性能。上面的Boolean.valueOf每次就是返回Boolean.TRUE或者Boolean.FALSE。由于Boolean是不可变对象,那么它有意义的实例只需要Boolean.TRUE和Boolean.FALSE就能代表所有的实例对象,且Boolean.TRUE和Boolean.FALSE的value不能变。所以不用担心对象A和对象B同时引用了Boolean.TRUE,但由于在对象A中改变了Boolean.TRUE的value而对对象B产生影响,因为Boolean是不可变对象,它本身就不可能被改变value。

  假设对于不可变对象仅仅只能通过静态工厂方法获得且返回的都是同一个对象,那么只需要通过==就能判断对象是否相同而不需要使用equals.

猜你喜欢

转载自www.cnblogs.com/yhcjhun/p/10965979.html