首页 > 解决方案 > 生成器模式不返回“this”

问题描述

我今天在 Spring Boot 中使用了 RestTemplateBuilder,发现它的方法不返回“this”,而是返回一个新的构建器实例。

public RestTemplateBuilder basicAuthorization(String username, String password) {
    return new RestTemplateBuilder(this.detectRequestFactory, this.rootUri,
            this.messageConverters, this.requestFactory, this.uriTemplateHandler,
            this.errorHandler, new BasicAuthorizationInterceptor(username, password),
            this.restTemplateCustomizers, this.requestFactoryCustomizers,
            this.interceptors);
}

这是我第一次看到构建器模式最后没有返回“this”。有什么好的理由这样做吗?

标签: springdesign-patterns

解决方案


构建器模式没有义务this为每个方法返回。它是实现细节,它被封装在类本身中。

据我所知,它是为了不变性而完成的,因此您可以使用相同的RestTemplateBuilder实例来创建不同的RestTemplate实例。让我们看一下这个例子:

RestTemplateBuilder basicRestTemplateBuilder = new RestTmplateBuilder();
RestTemplate restTemplateWithBasicAuth = basicRestTemplateBuilder.basicAuthorization(username, password).build();
RestTemplate restTemlateWithUriTemplateHadler = basicRestTemplateBuilder.uriTemplateHandler(uriTemplateHandler).build();

您可以安全地重用相同的构建器实例,而不必担心它会在其他地方配置错误。


推荐阅读