构建器模式

构建器模式就不详细说了,它就是说在类的内部写一个静态内部类,可以方便的构建类并选择性的设置类的属性,不需要繁杂的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;

你可能感兴趣的:(构建器模式)