1.考虑用静态工厂方法代替构造器
例子:
public static Boolean valueOf(boolean b){
return b ? Boolean.TRUE : Boolean.FALSE;
}
使用静态工厂替代构造器的优势:
1)他们有名称
2)不必每次调用都产生新的对象
3)可以返回原返回类型任何子类型的对象
4)创建参数化类型实例的时候,使代码更简洁
缺点:1)类如果不含公有的或者受保护的构造器,就不能被子类化
2)与其他的静态方法没有任何区别:API中没有特殊标明,因此很难查找如何实例化一个类。
静态工厂方法的惯用名称
*valueOf--该方法返回的实例与它的参数具有相同的价值。这样的静态工厂方法实际上是类型转换方法。
*of--valueOf的一种更为简洁的替代
*getInstance--返回的实例是通过方法的参数来描述的,但是不能说具有与参数同样的值。对于singeton来说,该方法 没有参数,并返回唯一实例
*newInstance--像getInstance一样,但newInstance能确保返回的每个实例都与其他实例不同
*getType--像getInstance一样,但是在工厂方法处于在不同的类中时使用。Type表示工厂方法所返回的对象类型
*newType--像newInstance一样,但是在工厂方法处于在不同的类中时使用。Type表示工厂方法所返回的对象类型