Effective java读书札记第一条之 考虑用静态工厂方法代替构造器

对于类而言,为了让客户端获取它资深的一个实例,最常用的方法就是提供一个共有的构造器。还有一种放你发,也应该子每个程序员的工具箱中占有一席之地。类可以提供一个共有的静态 工厂方法,它只是返回类的实例的静态方法。

类可以通过静态工厂方法类提供它的客户端(对象),而不是通过构造器。提这样做的好处有:

1.静态工厂方法与构造器不同的第一大优势在于,它们有名称.比如构造器BigInteger(int,int,Random)返回的BigInteger可能为素数,如果用名为BigInteger.probablePrime的静态工厂方法来表示,显然更为清楚。当一个类需要多个带有相同签名的构造器时,就用静态工厂方法代替构造器,并且慎重地选择名称以便突出它们之间的区别。

2.静态工厂方法与构造器不同的第二大优势在于,不必再每次调用它们的时候都创建一个新对象。这个具体不说了,可以看下单例模式。

3.静态工厂方法与构造器不同的第三大优势在于,它们可以返回原返回类型的任何子类型的对象。这项技术适用于基于接口的框架。使用这种静态方法时,甚至要求额客户端通过接口来引用被返回的对象,而不是通过它的实现类来引用被返回的对象,这是一种良好的习惯。

4.静态工厂方法的第四大优势在于,在创建参数化类型的实例的时候,它们使代码变得更加简洁。

缺点:

静态工厂方法的主要缺点在于,类如果不含有共有的或者受保护的构造器,就不能被子类化。

静态工厂方法的第二个缺点在于,它们与其他的静态方法实际上没有任何区别。在API文档中,它们没有像构造器那样明确标识出来。因此,对于提供了静态工厂方法而不是构造器的类来说,要想查明如何实例化一个类,这是非常困难的。不过你通过在类或者接口注释中关注静态工厂,并遵守标准的命名习惯,也可以弥补这一劣势。下面是一些惯用名称:

valueOf

of

getInstance

newInstance

getType

newType

简而言之,静态工厂方法和共有构造器都各有用处,我们需要理解它们各自的唱出。静态工厂通常更加合适,因此切忌第一反应就是提供公有的构造器,而不先考虑静态工厂。

Effective java读书札记第一条之 考虑用静态工厂方法代替构造器,布布扣,bubuko.com

时间: 2024-10-10 22:54:30

Effective java读书札记第一条之 考虑用静态工厂方法代替构造器的相关文章

Effective Java 读书笔记(一):使用静态工厂方法代替构造器

这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文<java中final与static的使用场景总结>. 什么是静态工厂方法? 可以参考书中的例子(摘自JDK1.7 java.lang.Boolean) public final class Boolean implements java.io.Serializable, Comparable<

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

1.静态工厂方法:一种特殊归纳的类静态方法,用来产生类的一个实例(对象). 2.不可实例化的类:可以将构造方法的访问权限设为私有,并在构造方法中抛出异常来保证类不能被实例化. 3.final:被final修饰的类不可及被继承,被final修饰的变量就是一个常量,只能赋值一次. -----> 对于工具类的设计习惯:1要把类用final修饰:2要把构造方法设为私有,并在构造方法中跑出异常. -----> 4.

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

使用静态工厂方法代替构造器的几大优势: 静态工厂方法具有名称. 可以通过它的名称来判断它返回的实例的大概信息. 不必再每次调用时都创建一个新的实例.  例如单例类就使用了静态工厂方法. 静态工厂方法可以返回原返回类型的任何子类型的对象实例.   如返回类型是Service,可以返回Service类型的任何子类型 在创建参数化类型的实例时,静态工厂方法使代码变得更加简洁. 静态工厂方法的一些惯用名称: valueOf    该方法返回的实例与它的参数具有相同的值.它实际上时做类型转化的. of  

第1条:考虑用静态工厂方法代替构造器

为了获得一个类的实例,有两种办法1.类提供一个公有的构造器 2.类提供一个公有的静态工厂方法. 静态工厂方法的优势: 1.有名称. 慎重地选择方法名称能突出多个构造器的区别,例如使用BigInteger(int, int, Random)构造器,返回的BigInteger可能为素数,如果用 BigInteger.probalePrime(int, Random)静态工厂方法,显得更为清楚. 2.不必在每次调用的时候都创建一个新的对象. Boolean类的代码中有public static fin

Efflective Java读书笔记 第一条 考虑用静态工厂方法代替构造器

创建一个类的实例的方法,最常用的是提供一个公有[public]的构造器,另外还有一种方法是类可以提供一个公有的静态工厂方法. 静态工厂方法对于构造器有着不同的优势和劣势. 优势: 1.静态工厂方法可定义更有意思的名称,而构造函数只能是类名. eg:BigInteger的构造函数返回的可能是素数,不过使用BigInteger.probablePrime更加明确. 2.静态工厂方法不必没有调用的时候都创建一个新的对象,这对于不可变类可以预先构造好实例,调用时静态工厂方法直接返回即可. eg:Bool

Effective Java读书笔记(3对于所有对象都通用的方法)

3.1 覆盖equals时请遵守通用约定 什么时候应该覆盖Object.equals()方法呢? 如果类具有自己特有的"逻辑相等"概念(不同于对象等同的概念),而且超类还没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法. Object.equals()方法具有自反性.对称性.传递性.一致性和与null比较返回false的特点. 实现高质量equals方法的诀窍: (1)使用==操作符检查"参数是否为这个对象的引用".如果是,则返回true,这

Effective Java第三版(一) ——用静态工厂代替构造器

此文做为<Effective Java>系列的第一篇,所以有必要大概说下此书的特点,当然很多人可能都看过,毕竟是有着Java四大名著之一的大名在外,不过总会有萌新不了解,例如我!<Effective Java>第三版较之上一版新增了对Java7.8.9的一些新特性的条目.而条目的概念可以理解为武功秘籍中的一招一式,学完了每一招一式,就是神功大成之时.第三版在第二版的基础上新增了一些条目数,达到了90条.书就介绍到这里,下面介绍第一条——用静态工厂代替构造器. 对于创建对象,最熟悉的

[Effective Java]考虑用静态工厂方法代替构造器

本文主要介绍如何使用静态工厂方法已经在那种场合来使用这种方式代替构造方法. 众所周知,对于类而言,我们为了获得一个类的实例对象,通常情况下会提供一个公有的(public) 的构造器.当然除了这种方法以外,我们还可以通过给类提供一个public的静态工厂方法(static factory method)的方式来完成,让它返回一个类的实例. 先看一个简单的Boolean的示例,这个示例将boolean基本类型值转换成一个Boolean对象的引用. public static Boolean valu

第一条:考虑用静态工厂代替构造器

对于类而言,为了让使用者获取它自身的一个实例,最常见的方法就是提供一个公有的构造器.但是有一种方法,他就是静态工厂方法(static factory method),它只返回类的实例的静态方法.比如说我们所有的基本类型的封装类中的valueOf()方法 1 public static Boolean valueOf(boolean b){ 2 3 return b ? Boolean.TRUE : Boolean.FALSE; 4 5 } 类可以通过静态的工厂方法提供它的客户端,而不是通过构造器