侧边栏壁纸
博主头像
buukle博主等级

布壳儿

  • 累计撰写 106 篇文章
  • 累计创建 15 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

设计模式(1) - 工厂

administrator
2021-06-18 / 0 评论 / 0 点赞 / 316 阅读 / 1085 字

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

0

评论区