builder模式各类源码中比较常见,本源码节选自 minio-8.0.3.jar
package io.minio;
public class MinioClient {
// 使用私有构造函数,防止外部创建
private MinioClient(HttpUrl baseUrl, String region, ...) {
this.regionCache = new ConcurrentHashMap();
this.userAgent = DEFAULT_USER_AGENT;
this.baseUrl = baseUrl;
...
}
// 提供静态的 builder(),直接返回创建者对象
public static Builder builder() {
return new Builder();
}
// Builder 类用于构造复杂对象 MinioClient
public static final class Builder {
HttpUrl baseUrl;
String region;
...
public Builder() {
}
// 不改变返回对象,便于链式调用
public Builder endpoint(String endpoint) {
this.setBaseUrl(this.getBaseUrl(endpoint));
return this;
}
public Builder credentials(String accessKey, String secretKey) {
this.provider = new StaticProvider(accessKey, secretKey, (String)null);
return this;
}
// build() 方法,可以直接返回复杂对象
public MinioClient build() {
// 验证参数(登陆地址、账号密码等)
...
// 使用私有构造创建函数
return new MinioClient(this.baseUrl, ...);
}
}
调用builder创建对象
MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();