administrator
Published on 2021-06-18 / 317 Visits
0
0

设计模式(1) - 工厂

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的约束泛类型,调用者不需要关心其内部实现,又能最大限度保证效率.


Comment