静态工厂方法相比于构造器之优劣

  1. 什么是静态工厂方法?
    通常我们获取类的实例是采用new,通过构造方法获取一个实例。除此以外,我们还能够用一个静态方法来对外提供自身实例,即静态工厂方法。

  2. 静态工厂方法的优势

    2.1 静态工厂方法可以有自己的名称
    构造方法与类同名,当出现多个重载的构造方法时区别仅在参数列表,用户易于混淆。而静态工厂方法可以为不同的参数列表定义不同的名称,突出不同静态工厂方法之间的区别。

    2.2 不必每次调用时都创建一个新对象
    有时候外部调用者只需要拿到一个实例,而不关心是否是新的实例;又或者我们想对外提供一个单例时 —— 如果使用工厂方法,就可以很容易的在内部控制,防止创建不必要的对象,减少开销。

    2.3 可以返回原返回类型的子类
    这使我们在选择返回对象的类时有了更大的灵活性。尤其时对于基于接口的框架,Java8以后接口可以有静态方法,那么我们就可以直接通过接口来引用被返回的对象。

    2.4 所返回的对象的类可以随着每次调用的变化而变化
    根据不同的参数值返回不同的结果,只要是声明的返回类型的子类都可以,具体的实现过程不可见。这允许开发者后续对类的实现进行修改而不造成负面结果。

    2.5 方法返回的对象所属类,在编写该静态方法时可以不存在。
    这种灵活的特性构成了服务提供者框架的基础。

  3. 静态工厂方法的缺点
    如果一个类不含有公共或被保护的构造器,就不能被子类化。此外,相比于构造器,静态工厂方法在API文档中没有明确标识,不易被程序员所察觉。

发布了15 篇原创文章 · 获赞 0 · 访问量 442

猜你喜欢

转载自blog.csdn.net/hblack_313/article/details/104039582