天天看點

建造者模式 -- 複雜對對象的建造過程

對象的初始化很複雜,并不是指構造方法複雜, 是指對象達到可以使用的狀态,中間需要執行很複雜的邏輯。比如: 要連接配接資料庫,要打開檔案句柄,要加載配置檔案, 要請求rpc接口等。

如果把這些邏輯都一股腦的寫在構造方法, 或者Init方法中, 邏輯就很多很雜, 建造者模式就派上用場了。

優缺點

優點:

  1. 分離複雜的建立邏輯
  2. 便于精細控制建立過程
  3. 建立過程中的變化也易于擴充, 并且對于調用這可以屏蔽這部分的變化

缺點:

  1. 如果有很多複雜類, 會導緻過多的建造者類

Builder

建造者模式一般需要一個 Builder 。 而建立對象的複雜參數和邏輯都在這裡類中進行, 這個Builder 類的build方法一般就是具體的建立方法, 在build方法中可以校驗檢測下是否準備操作都已經完成了。

日常接觸到的

jdk11中的HttpClient相關的類都是使用建造者模式。

HttpClient build = HttpClient.newBuilder().proxy(A).sslContext(B).build()

    HttpRequest  request = HttpRequest.newBuilder().uri("www.baidu.com").GET().build()

           

與工廠模式的差異

  1. 工廠模式是用來建立不同的對象的, 是為了解耦不同對象的不同建立邏輯的
  2. 建造者方法隻是用來分離對象的複雜建立邏輯, 解耦對象的建立和調用的邏輯。

思考

建造者模式也是一個簡單的易于掌握的模式, 對于複雜的類的建立都可以考慮使用, 但是我平時對于複雜的對象的建立一般是定義一個init方法, 把所有的邏輯都放入init中, 這種方式還是不太好的。