构建器模式
2018-02-23 本文已影响0人
柚子过来
构建器模式就不详细说了,它就是说在类的内部写一个静态内部类,可以方便的构建类并选择性的设置类的属性,不需要繁杂的setter与getter。在各种项目源码里随处可见,如zipKin的Brave类中有个静态类:
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);
}
}
这样在使用的时候就可以按照需求构建对象了:
Brave.Builder builder = new Brave.Builder(properties.getServiceName());
builder.spanCollector(spanCollector);
builder.traceSampler(Sampler.ALWAYS_SAMPLE);
Brave brave = builder.build();
还有常见的像OkHttp3中也大量使用了构建器,像Request、Response、Client等,我们可以按需要的属性构建client或者为client添加属性:
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new BraveOkHttpRequestResponseInterceptor(brave.clientRequestInterceptor())
.build();
return client;