创建和销毁对象

原创
2017/03/31 09:24
阅读数 91

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

类可以通过静态工厂方法来提供它的客户端,而不是通过构造器。提供静态工厂方法而不是公有的构造器。这样做有几大优势:

1.静态工厂方法与构造器不同的第一大优势在于,它们有名称。

一个类只能有一个带有指定签名的构造器。编程人员通常知道如何避开这一限制:通过提供两个构造器,他们的参数列表只在参数类型的顺序上有所不同。用户可能会常常调错构造器。

由于静态工厂方法有名称,所以不会有所限制。当一个类需要多个带有相同签名的构造器时,就用静态工厂方法代替构造器。慎重选择名称!

2.不必在每次调用时都产生一个新的对象。

类似于flyweight模式

3.它们可以返回原返回类型的任何子类型的对象。

这项技术适用于基于接口的框架.

静态工厂方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不必存在。这种灵活的静态工厂方法构成了服务提供者框架,例如JDBC API。

4.在创建参数化类型实例的时候,它们使代码变得更加简洁。

例如HashMap

Map<String,Long> m=new HashMap<String,Long>();

//随着类型参数变得越来越长,这一冗长的说明也越来越痛苦
//但是有了静态工厂方法,编译期就可以替你找到类型参数。这被称作类型推导。
//假设HashMap提供了静态方法
public static <K,V> HashMap<K,V> newInstance(){
return new HashMap<K,v>();
}
//然后就可以用以下代码来实现
Map<String,Long> m=HashMap.newInstance();

 

静态工厂方法的缺点:

1.类如果不含公有的或者受保护的构造器,就不能被子类化。

 

2.他们与其他的静态方法实际上没有任何区别。

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部