spring - 构建器模式不返回 "this"

标签 spring design-patterns

我今天在 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”。 有什么充分的理由这样做吗?

最佳答案

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

据我了解,这样做是为了保持不变性,因此您可以使用相同的 RestTemplateBuilder 实例来创建不同的 RestTemplate 实例。 让我们看一下这个例子:

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

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

关于spring - 构建器模式不返回 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50000683/

相关文章:

java - 使用 Java 托管 HTTP 端点

java - Spring 启动;我们可以在 Java 枚举中使用 @Value

java - Spring MVC 和 POST 上的重定向在 URL 上发送目标文件

php - 我如何处理购物篮,其中有很多产品可能具有不同的成本计算

python - python : multiple OR or IN in if statement? 中最好的方法是什么

forms - Spring MVC 自定义编辑器和选择选项性能不佳

java - 从 Hibernate hbm 到 JPA 注释

design-patterns - 多个处理程序中只有一个处理程序应根据特化进行操作的模式

java - 继承与策略模式

unit-testing - 单元测试 : private methods and how to refactor