1 . 用静态工厂代替构造器
静态工厂的几个优点:
①静态构建方法名能更加明显的彰显出所得实例的特征;
如果采用多参数的构造方法,不同需求的实例化需求参数不一样,势必会引起层叠式参数个数递增的多个构造方法,这种多个构造方法会引起开发人员迷惘,短时间内不知道用哪个构造方法合适;
②返回类型可以更加多态;
静态工厂的返回值可以用一个父类型修饰,这样静态工厂内部可以实现不同的子类型实例并返回,调用者并不需要关心接收到的子类型是什么具体的类型,只需要调用父类型指定的api方法完成调用即可.
<1> 例如 : EnumSet.noneof(Class elementType)方法,部分源码如下 :
.....
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
Enum<?>[] universe = getUniverse(elementType);
if (universe == null)
throw new ClassCastException(elementType + " not an enum");
if (universe.length <= 64)
return new RegularEnumSet<>(elementType, universe);
else
return new JumboEnumSet<>(elementType, universe);
}
.....
当指定的枚举类型实例长度大于64时,返回 JumboEnumSet , 否则返回 RegularEnumSet.返回类型是继承Enum的约束泛类型,调用者不需要关心其内部实现,又能最大限度保证效率.
评论区