设为首页 加入收藏

TOP

Effective Java - 用静态工厂方法代替构造器
2015-02-02 14:22:40 来源: 作者: 【 】 浏览:14
Tags:Effective Java 静态 工厂 方法 代替 构造

Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例:


相对公有的构造器,静态工厂方法有以下几大优势。


优势1.静态工厂方法的名称,因此比构造器更准确地描述返回的实例。
比如BigInteger.probablePrime方法:


顺便也贴出其调用的largePrime方法:


虽然smallPrime和largePrime最后都是通过公有构造器返回实例。
但是如果仅仅用构造器重载表达这个实例的特征,这很难让人记住什么时候应该调用什么构造器。
而提供一个名称去描述实例更为直观。


优势2.静态工厂方法不必每次都创建一个新的对象,我们可以对实例进行控制。
这样我们就能将创建好的实例缓存起来重复利用,尤其是在创建对象的代价较高的情况下。
比如Boolean.valueOf:


优势3.静态工厂方法可以返回原返回类型的子类型对象。
这一点能体现静态工厂方法的灵活性,
以EnumSet为例:


而RegularEnumSet和JumboEnumSet为EnumSet的子类,并且都没有提供公有构造器。


优势4.静态工厂方法创建参数化(泛型)实例的时候更加简洁。
举个例子:



这样一来创建实例时就可以:


而不是


从Java7开始这一点变得没有意义,事实上Josh Bloch也在书上提到了这点——Java以后会在构造器和方法调用中执行这种类型推导。


说说静态工厂方法的缺点。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux编程中接收主函数返回值以及.. 下一篇Python面向对象编程学习笔记

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: