码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-08-21 00:15:18      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:java   使用   cti   代码   new   ef   sp   type   

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

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

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

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

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

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

缺点:

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

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

valueOf 

of

getInstance

newInstance

getType

newType

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

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

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

标签:java   使用   cti   代码   new   ef   sp   type   

原文地址:http://blog.csdn.net/howlaa/article/details/38715241

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!