引言
OkHttp3作为一款最受欢迎的http网络请求框架,具有极佳的可扩展性,非常值得我们去学习它的设计思想和模式。所为他山之,石可以攻玉,不外如是。下面我们来看看它都是用了哪些好用的设计模式。
OkHttp中的责任链模式
OkHttp中最直接的责任链模式的使用就是Interceptor
的使用。书写简单漂亮,使用也非常方便,只需要OkHttpClient.Builder
调用addInterceptor()
方法,将实现了Interceptor
接口的类添加进去即可,扩展性和可定制化都非常方便。
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new HeaderInterceptor())
.addInterceptor(new LogInterceptor())
.addInterceptor(new HttpLoggingInterceptor(logger)
......
.readTimeout(30, TimeUnit.SECONDS)
.cache(cache)
.build();
具体的可以参考我的博客:从OkHttp中学习设计模式—责任链模式
OkHttp中的建造者模式
OkHttp中最直接的建造者模式的使用就是XXBuilder
的使用。在OkHttp中的OkHttpClient
、Request
、Response
、HttpUrl
、Headers
、MultipartBody
等大量使用了类似的建造者模式。
public class OkHttpClient implements Cloneable, Call.Factory, WebSocket.Factory {
......
public static final class Builder {
Dispatcher dispatcher;
@Nullable Proxy proxy;
int callTimeout;
int connectTimeout;
......
public OkHttpClient build() {
return new OkHttpClient(this);
}
}
}
public class Headers {
......
public static final class Builder {
final List<String> namesAndValues = new ArrayList<>(20);
......
public Headers build() {
return new Headers(this);
}
}
}
public class Request {
......
public static class Builder {
@Nullable HttpUrl url;
String method;
Headers.Builder headers;
@Nullable RequestBody body;
......
public Request build() {
return