考虑用静态工厂方法代替构造器
读书笔记
一.什么是静态工厂方法
工厂方法就是返回一个类的实例的静态方法。
例如,将一个基本类型的布尔值封装成一个对象
Boolean valueOf(boolean bool){
return bool ? Boolean.TRUE : Boolean.False;
}
二.静态工厂方法的优点
1.有自己的名字
给方法起名字时,最基本的就是要做到见名知意。当一个对象的构造方法很多时,通过方法签名(方法名以及参数)用户很难理解每一个构造函数会产生怎样的对象,也有可能两个构造方法的参数类型一致,给开发者和使用者造成很大的不便
以上问题,可以通过静态工厂方法来解决,对于产生特定类型的对象时,可以通过简单的单词来描述这个对象,这样,可读性会大大提高。
2.不必每次都产生新的对象
也就是说,对于不必要多次生成新对象的情况,可以直接返回已经存在的对象的引用,可以提高效率。
3.返回任何子类型的对象
调用构造方法产生的对象一定是构造方法所在类的实例,而静态工厂方法更加灵活。
应用:服务提供者框架
好处:这样的静态工厂方法的返回值一般是接口类型,可以返回实现了该接口的所有类的实例。
4.创建参数化类型实例时,使代码变得更简洁
三.静态工厂方法的缺点
1.类如果没有公有或受保护的构造方法,则没办法被实例化。
2.与其他静态方法没有区别
这个主要是对于javadoc工具产生的文档中,不会标注静态工厂方法的特殊性。
四.静态工厂方法的惯用名称
valueOf --> 返回的实例与参数有相同的值,常用作类型转换
of --> valueOf的一种替代
getInstance --> 返回的实例是通过方法的参数描述的(不能说与参数有相同的值)
newInstance --> 像getInstance一样,但该方法保证返回的每个实例都互不相同。
getType --> 像getInstance一样(该方法处于另一个类中,Type为返回对象的类型)
newType --> 像newInstance一样(该方法处于另一个类中,Type为返回对象的类型)