我所認識的Builder設計模式

作者 | 2016-07-07

這篇文章不是教你怎麼實作Builder設計模式,而是告訴你為什麼有時候會使用Builder。(看到文章示意圖請先別生氣,是有關包子的)

Builder設計模式

有很多人問到,什麼是Builder模式,和Abstract Factory有什麼不同,我通常會舉包子的例子,但應該要先知道,沒有使用Builder模式的程式長什麼樣子。

假設一開始我只想要生產肉包,一個「肉包」的產生方式(物件),首先要先知道包子是如何做出來的(類別),知道製作方法後,要提供「材料」(建構子的參數),再加上做法(程式設計),才能做出包子來。所以,以下的東西要先準備:

1. 類別

2. 建構子

可是,肉包有很多口味,有的人不想用到胡椒,想放冰糖,所以變成

但有的人,想做出又有胡椒又加冰糖的肉包,所以又變成:

此時,建構子就有三種了,更何況肉包人人會做,各有巧妙不同,其他的配料再加進來,建構子的數量就很可觀了。

那,這有什麼不好? 不是好好的認識我寫的建構子就好了嗎?

其實,有很多時候,我們是沒有肉包類別的原始碼的,我們直接在開發工具中選擇建構一個物件時,那這時就要一個個檢視,我該用那一個建構子才能做出我想要的肉包,學習、認識這個類別的成本是很高的。

也會有人說:

那你不就好好的看類別的文件,不就會使用這個類別了嗎?

有時,我只是謙卑的想要個普通的肉包,但卻要花時間先瞭解肉包的建構子,這不是坑爹嗎?

再者,如果我還想生產「菜包」、「蓮蓉包」等,不就要一一去另外設計這機個類別,再為每個類別設計好幾個建構子,更不用說要重複設計內部製作包子的過程相關的程式碼了。包子的製作過程中,餡料、麵皮、捏製的順序都差不多,不應該重複這些設計吧?

Builder模式重視的是物件產生的過程,而不需要Java的多型,因此,如果有個類別,能讓你如此產生出一顆肉包來:

你會想用這個Builder來產生物件,還是去學會每個類別的建構子後,再來產生呢?

使用類別的人才是老大,當你new出一個Builder後再打set時,就會跑出一堆專門設定類別的屬性與行為的方法,直接用,繼續set到符合你的需求後,最後再build(),物件就生出來了,何來要去研讀文件再來生成物件?

相關文章:

Category: Java 標籤:, ,

關於 Hank Tom

專長為程式語言、雲端服務開發,Linux系統管理, 任職:利拓科技 技術長,海林行動科技 技術總監 輔仁大學 兼任助理教授 ,為 Android高效入門>深度學習、CentOS 7建置、管理與伺服器架設實戰、Java網路程式設計、雲端網頁程式設計-Google App Engine應用實作 等書作者

使用Facebook直接回應

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *