文章标题

Effective Java 中文版之学习 第1条:考虑用静态工厂方法代替构造器

对于类而言为了让客户端获取自身的一个实例,最常用的方法就是提供一个公有的构造器。还有一种方法就是,类可以提供一个公有的静态工厂方法(static factory method),它只是返回类的实例的静态方法。下面是一个来自Boolean(基本数据类型boolean的包装类)的简单示例,这个方法将boolean基本类型值转换成了一个Boolean对象引用:

public static Boolean valueOf(boolean b){
    return b ? Boolean.TRUE : Booean.FALSE;
}
注意:静态工厂方法模式与设计模式中的工厂方法模式不同,本条目中所指的静态工厂方法并不直接对应于设计模式中的工厂方法。
类可以通过静态方法提供它的客户端,而不是通过构造器。提供静态方法而不是公有的构造器,这样做有几大优势。
静态工厂方法与构造器不同的第一大优势在于,它有名称。如果构造器的参数本身没有确切的描述正在返回的对象,那么具有适当名称的静态工厂会更容易使用,产生的客户端代码也更容易阅读。例如构造器BigInteger(int,int,Random)返回的Random可能为素数,如果用名为BigInteger.probablePrime的静态方法来表示,显然更为清楚。
当一个类需要多个带有相同签名的构造器时,就用静态工厂方法代替构造器,并且慎重的选择名称以便突出它们之间的区别。

静态工厂方法与构造器不同的第二大优势在于,不必每次调用他们的时候否创建一个新的对象。如果程序经常请求创建相同的对象,并且创建对象的代价很高,则这项技术可以极大地提高性能。
静态工厂方法能够为重复的调用返回相同的对象,这样有助于类总能严格控制在某些时刻哪些实例应该存在。

静态工厂方法与构造器不同地第三大优势在于,它们可以返回原返回类型的任何子类型的对象。这样我们在选择返回对象的类时就有了更大的灵活性。

这种灵活性的一种应用是,API可以返回对象,同时又不会是对象的类变为公有的。以这种方式隐藏实现类会使API变得非常简洁。
公有的静态方法返回的对象的类不仅可以是非公有的,而且该类还可以随着每次调用发生变化,这取决于静态工厂中的参数值。
静态工厂方法的第四大优势在于,在创建参数化类型实例的时候,他们使代码变得更加简洁。遗憾的是,在调用参数化类的构造器时,即使类型参数很明显,也必须指明。这通常要求你提供两次类型的参数:
Map

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值