为什么使用静态方法获取实例而不是构造函数? HttpClientBuilder.java

问题描述

以下代码来自Apache Http Client。

HttpClientBuilder.java

public class HttpClientBuilder {

    public static HttpClientBuilder create() {
        return new HttpClientBuilder();
    }

    protected HttpClientBuilder() {
        super();
    }
}

在这里,创建静态方法获取实例的目的是什么?为什么不使用公共构造函数?为什么要在构造函数调用super()

解决方法

如果要使用HttpClientBuilder的新实例的代码本身通过构造函数创建了对象,那么它将永远更多地精确地创建该类型的对象,并将锁定它传递的某些参数集到构造函数。

工厂方法create具有更大的灵活性。如图所示,它无论如何都返回HttpClientBuilder。但是说些改变,HttpClientBuilder的作者希望在某些情况下返回HttpClientBuilder的特殊新子类。使用factory方法,他们可以做到这一点,并且无需更改任何客户端代码,甚至都不知道其中的区别。在直接调用构造函数的情况下,如果不更改客户端代码就无法进行该更改。因此,与直接调用构造函数相比,工厂方法通常具有更大的灵活性,可供类的作者将来进行修改。