美文网首页
为什么要用建造者模式

为什么要用建造者模式

作者: 望北8261 | 来源:发表于2022-07-03 01:03 被阅读0次

    写在前面

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

    使用建造者模式的样子

    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,
    )
    

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

    相关文章

      网友评论

          本文标题:为什么要用建造者模式

          本文链接:https://www.haomeiwen.com/subject/ctllbrtx.html