OkHttp原理分析(七)

161 阅读1分钟

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 {
  ...
}