構(gòu)建器模式就不詳細(xì)說了半抱,它就是說在類的內(nèi)部寫一個(gè)靜態(tài)內(nèi)部類,可以方便的構(gòu)建類并選擇性的設(shè)置類的屬性衰絮,不需要繁雜的setter與getter凝赛。在各種項(xiàng)目源碼里隨處可見注暗,如zipKin的Brave類中有個(gè)靜態(tài)類:
public static class Builder {
private final ServerClientAndLocalSpanState state;
private SpanCollector spanCollector;
private Random random;
private Sampler sampler;
public Builder() {
this("unknown");
}
public Builder(String serviceName) {
this.spanCollector = new LoggingSpanCollector();
this.random = new Random();
this.sampler = Sampler.create(1.0F);
try {
int ip = InetAddressUtilities.toInt(InetAddressUtilities.getLocalHostLANAddress());
this.state = new ThreadLocalServerClientAndLocalSpanState(ip, 0, serviceName);
} catch (UnknownHostException var3) {
throw new IllegalStateException("Unable to get Inet address", var3);
}
}
public Brave.Builder traceSampler(Sampler sampler) {
this.sampler = sampler;
return this;
}
public Brave.Builder spanCollector(SpanCollector spanCollector) {
this.spanCollector = spanCollector;
return this;
}
public Brave build() {
return new Brave(this);
}
}
這樣在使用的時(shí)候就可以按照需求構(gòu)建對象了:
Brave.Builder builder = new Brave.Builder(properties.getServiceName());
builder.spanCollector(spanCollector);
builder.traceSampler(Sampler.ALWAYS_SAMPLE);
Brave brave = builder.build();
還有常見的像OkHttp3中也大量使用了構(gòu)建器,像Request墓猎、Response捆昏、Client等,我們可以按需要的屬性構(gòu)建client或者為client添加屬性:
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new BraveOkHttpRequestResponseInterceptor(brave.clientRequestInterceptor())
.build();
return client;