在 Kotlin 遇見 Builder Pattern

Voss
Jul 12, 2022

前言

Builder模式 在android當中是個常見的模式,例如我們在實作Dialog 、Snackbars、FragmentTransition 等等

是幾乎都會用到的設計模式,但為何要這樣設計 ? 這樣的設計有甚麼好處 ?

為什麼要使用建構者模式來生成物件?

之前的文章有介紹過的 工廠模式 ,一開始覺得與Builder還蠻像的,都是為了建構物件而生的,而最大的不同在於,工廠是為了生成不同類型的產品Builder是為了生成相同的產品但內容的屬性不同

稍微來看一下wiki介紹

是一種對象構建模式。它可以將複雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現方法可以構造出不同表現(屬性)的對象

簡單說,在面對這個較為複雜的物件,我們可以將建構與設定的過程,拆分為一個一個的方法,最後曝露給使用者去呼叫這些功能,就能一步一步的完成建構

建構者模式要解決的問題

而我認為要解決的問題為下列幾個

  1. 太冗長且不易閱讀的建構子
  2. 建構子內不需要的參數可以給予null 而不用強硬給 default Value
  3. 生產的物件在不同情境下有不同的屬性
  4. 物件的建構會被反覆呼叫與使用

設計模式上需要遵守的幾個規則

  1. 隱藏建構子
  2. 使用一個 inner class Builder 替代建構子來生成物件
  3. 向外暴露 setting fun 去改變物件的屬性
  4. 最後暴露一個 fun build 回傳當前設計好的物件

這些規則的目的在於,把物件封包並讓我們能透過 fun 逐步地去建構這個複雜的物件

這邊我用電腦來作為例子,要生成一個電腦的物件,需要一些零件,這邊也就透過 Builder 的內部 fun 去讓外部呼叫且彈性的設置。最終透過呼叫build 回傳我們要的 Computer 物件

以上就是我對 Builder Pattern 的淺見~ 有任何不同想法歡迎留言討論~

--

--

Voss

I’m Voss , a Software Engineer , a Reader , a Body Builder