我今天在 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/