前言
Builder模式 在android當中是個常見的模式,例如我們在實作Dialog 、Snackbars、FragmentTransition 等等
是幾乎都會用到的設計模式,但為何要這樣設計 ? 這樣的設計有甚麼好處 ?
為什麼要使用建構者模式來生成物件?
之前的文章有介紹過的 工廠模式 ,一開始覺得與Builder還蠻像的,都是為了建構物件而生的,而最大的不同在於,工廠是為了生成不同類型的產品,Builder是為了生成相同的產品但內容的屬性不同
稍微來看一下wiki介紹
是一種對象構建模式。它可以將複雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現方法可以構造出不同表現(屬性)的對象
簡單說,在面對這個較為複雜的物件,我們可以將建構與設定的過程,拆分為一個一個的方法,最後曝露給使用者去呼叫這些功能,就能一步一步的完成建構
建構者模式要解決的問題
而我認為要解決的問題為下列幾個
- 太冗長且不易閱讀的建構子
- 建構子內不需要的參數可以給予null 而不用強硬給 default Value
- 生產的物件在不同情境下有不同的屬性
- 物件的建構會被反覆呼叫與使用
設計模式上需要遵守的幾個規則
- 隱藏建構子
- 使用一個 inner class Builder 替代建構子來生成物件
- 向外暴露 setting fun 去改變物件的屬性
- 最後暴露一個 fun build 回傳當前設計好的物件
這些規則的目的在於,把物件封包並讓我們能透過 fun 逐步地去建構這個複雜的物件
這邊我用電腦來作為例子,要生成一個電腦的物件,需要一些零件,這邊也就透過 Builder 的內部 fun 去讓外部呼叫且彈性的設置。最終透過呼叫build 回傳我們要的 Computer 物件
以上就是我對 Builder Pattern 的淺見~ 有任何不同想法歡迎留言討論~