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

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

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

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

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

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

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

缺点:

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

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

valueOf 

of

getInstance

newInstance

getType

newType

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值