美文网首页
1. 考虑使用静态工厂方法代替构造方法 2019-11-08

1. 考虑使用静态工厂方法代替构造方法 2019-11-08

作者: 孙广明 | 来源:发表于2019-11-08 17:41 被阅读0次

1. 静态工厂方法例子:

如Boolean类中的valueOf(boolean b) 方法

/**
 * The {@code Boolean} object corresponding to the primitive
 * value {@code true}.
 */
public static final Boolean TRUE = new Boolean(true);

/**
 * The {@code Boolean} object corresponding to the primitive
 * value {@code false}.
 */
public static final Boolean FALSE = new Boolean(false);

//...中间代码省略

//静态工厂方法
@HotSpotIntrinsicCandidate
public static Boolean valueOf(boolean b) {
    return (b ? TRUE : FALSE);
}

注意:
静态工厂方法与工厂方法模式不同,类可以直接提供静态工厂方法,而不是公共的构造方法。

2. 使用静态工厂方法代替构造方法的优缺点

2.1 优点

(1). 静态工厂方法不像构造方法,它们是有名字的。(属于类的方法)
(2). 静态工厂方法与构造方法不同,他们被调用时不需要每次都创建一个对象。例如调用Boolean.valueOf(true)方法,返回的是Boolean类中定义的静态不变属性TRUE对象;
(3). 静态工厂方法与构造方法不同,他们可以返回任意对象,构造方法只能返回当前类的对象。
(4). 静态工厂方法返回对象的类可以根据输入类型不同而不同。例如使用泛型。
(5). 在编写该方法的类时,返回的对象的类不需要存在。(static关键字的作用)

2.2 缺点

(1). 只提供静态工厂方法、没有提供公共或者受保护的构造方法时不能被子类化。(主要限制)
(2). 静态工厂方法并不像构造方法那样突出、不容易被程序员阅读。

2.3 总结

静态工厂方法和公共构造方法都有他们的用途,并且了解他们的相对有点时值得的。通常,静态工厂方法更可取,因此避免在没有考虑静态工厂方法的情况下、提供公共构造方法。

相关文章

  • java编程建议系列一

    1.考虑用静态工厂方法代替构造器 静态工厂方法惯用名称 valueOf —— 类型转换方法 of —— value...

  • Java创建和销毁对象

    考虑用静态工厂方法代替构造器 静态工厂方法可以通过静态获取类的一个实例,而不需要通过构造器; 使用静态工厂方法的优...

  • 第一条 考虑用静态工厂方法代替构造器

    创建和销毁对象 考虑用静态工厂方法代替构造器 一般使用构造器 使用静态方法 这样写的优势 静态方法有名字构造器与类...

  • Effecttive-1(创建与销毁对象)

    1.考虑使用静态工厂方法代替构造函数 与构造方法不同,静态工厂方法具有名字每次被调用时,不需要重新创建一个对象可以...

  • effective java读书笔记

    一、考虑用静态工厂方法代替构造器1.静态工厂方法有名称,而构造器只能是类名 private Map > map =...

  • 《Effective Java》学习笔记上

    第2章 创建和销毁对象 第1条:考虑用静态工厂方法代替构造方法 静态工厂方法与构造方法的不同 优点: 静态工厂方法...

  • Effective Java 笔记 创建和销毁对象

    创建和销毁对象 1.考虑使用静态工厂方法代替构造器 优点: 1.1静态工厂方法存在名称,在类需要多个带有相同标签的...

  • EffectiveJava第2章-创建和销毁对象

    第1条:考虑使用静态工厂方法代替构造器 获取类实例的两种方法:公有的构造器、公有的静态工厂方法返回类的实例。 静态...

  • 创建和销毁对象

    1,考虑用静态工厂方法代替构造器 切忌第一反应就是提供共有构造器,而不先考虑静态工厂。 类可以通过静态工厂方法返回...

  • 第二章 创建和销毁对象

    1.考虑用静态工厂方法代替构造器 静态工厂方法与构造器不同的优势在于: 1.他们有名称(容易阅读) 2.不用每次调...

网友评论

      本文标题:1. 考虑使用静态工厂方法代替构造方法 2019-11-08

      本文链接:https://www.haomeiwen.com/subject/zqewbctx.html