侧边栏壁纸
博主头像
惊羽博主等级

hi ,我是惊羽,前生物学逃兵,现系统工程沉迷者 . 贝壳签约工程师 , 曾被雇佣为 联拓数科 · 支付研发工程师 、京东 · 京东数科 · 研发工程师、中国移动 · 雄安产业研究院 · 业务中台技术负责人 .

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

设计模式(1) - 工厂

惊羽
2021-06-18 / 0 评论 / 0 点赞 / 253 阅读 / 848 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-06-18,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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
广告 广告

评论区