【问题标题】:Why use static method to get instance instead the constructor? [duplicate]为什么使用静态方法来获取实例而不是构造函数? [复制]
【发布时间】:2021-02-16 21:06:36
【问题描述】:

以下代码来自 Apache Http 客户端。

HttpClientBuilder.java

public class HttpClientBuilder {

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

    protected HttpClientBuilder() {
        super();
    }
}

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

【问题讨论】:

  • 注意每个问题只问一个问题。 ...对 super() 的调用只是“糟糕的风格”。编译器无论如何都会将该调用插入到已编译的类文件中。除非在 java 文件中需要,否则不要将其写下来是一种很好的做法。
  • 还有经验丰富的会员:记得在发帖前进行研究。请记住,几乎所有关于 java 的问题都在这里被问过,并且(通常是广泛的)得到了回答。

标签: java apache-httpclient-4.x


【解决方案1】:

如果需要HttpClientBuilder 的新实例的代码通过构造函数创建对象本身,那么它将永远创建该类型的对象,并且它将锁定传递给它的一组特定参数构造函数。

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

【讨论】:

    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 2014-02-18
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2015-06-10
    • 2012-06-28
    相关资源
    最近更新 更多