OkHttp使用了大量的设计模式:单例模式,建造者模式,工厂模式,责任链模式,观察者模式
单例模式
object ConnectInterceptor : Interceptor {
...
}
建造者模
open class OkHttpClient internal constructor(
builder: Builder
) : Cloneable, Call.Factory, WebSocket.Factory {
...
class Builder constructor() {
...
}
}
工厂模式
interface Call : Cloneable {
...
interface Factory {
fun newCall(request: Request): Call
}
}
责任链模式
fun getResponseWithInterceptorChain(): Response {
val interceptors = mutableListOf<Interceptor>()
interceptors += client.interceptors
interceptors += RetryAndFollowUpInterceptor(client)
interceptors += BridgeInterceptor(client.cookieJar)
interceptors += CacheInterceptor(client.cache)
interceptors += ConnectInterceptor
if (!forWebSocket) {
interceptors += client.networkInterceptors
}
interceptors += CallServerInterceptor(forWebSocket)
val chain = RealInterceptorChain(interceptors, transmitter, null, 0, originalRequest, this,
client.connectTimeoutMillis, client.readTimeoutMillis, client.writeTimeoutMillis)
var calledNoMoreExchanges = false
val response = chain.proceed(originalRequest)
...
}
观察者模式
abstract class EventListener {
...
}