为什么要用建造者模式

2022-07-03  本文已影响0人  望北8261

写在前面

一直不喜欢复杂繁琐的东西,建造者模式就是一个很繁琐的模式,要写一堆代码。更不喜欢那些经验很丰富的人跟我说:这个模式好,你要用起来。但是他们自己说不出哪里好。

使用建造者模式的样子

OkHttp里面用了超级多的建造者模式,这里摘取了一小段,删除了大部分,只留我需要用来说明问题的那一部分。

class OkHttpClient(
  builder: Builder
) {

  val readTimeoutMillis: Int = builder.readTimeout

  val writeTimeoutMillis: Int = builder.writeTimeout

  class Builder constructor() {
    internal var readTimeout = 10_000
    internal var writeTimeout = 10_000

    fun readTimeout(duration: Duration) = apply {
      readTimeout = checkDuration("timeout", duration.toMillis(), TimeUnit.MILLISECONDS)
    }

    fun writeTimeout(duration: Duration) = apply {
      writeTimeout = checkDuration("timeout", duration.toMillis(), TimeUnit.MILLISECONDS)
    }

    fun build(): OkHttpClient = OkHttpClient(this)
  }
}

这个OkHttpClient类只有一个builder真正的成员变量,其它的比如readTimeoutMillis其实只是用了builder里面的成员变量。使用如下:

val client = OkHttpClient.Builder()
    .readTimeout(Duration.ofSeconds(20))
    .writeTimeout(Duration.ofSeconds(20))
    .build()

不用构造者模式的样子

class OkHttpClient(
    val readTimeoutMillis: Int = 10000,
    val writeTimeoutMillis: Int = 10000,
)

直接把Builder里面的参数写成OkHttpClient的参数,这不是更加简单么,效果不是一样的吗?使用如下:

val client = OkHttpClient(
    readTimeoutMillis = 20000,
    writeTimeoutMillis = 20000,
)

为什么要用建造者模式?不懂。

上一篇下一篇

猜你喜欢

热点阅读