天天看點

Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:

Java中除去有設計原則之外,還有23中設計模式。

這些模式都是前輩們一點一點積累下來,一直在改進,一直在優化的,而這些設計模式可以解決一些特定的問題。

并且在這些模式中,可以說是将語言的使用展現的淋漓盡緻。

那我們今天要學習  建立型模式  中的  建造者模式  !

建造者模式:

這個是建立型模式的最後一個模式,建造者模式,我們先來認識一下它

建造者模式定義:指将一個複雜對象的構造與它的表示分離,使同樣的建構過程可以建立不同的表示。

這個定義需要大家多讀幾遍,不是那麼容易了解。

這裡我來給大家舉個栗子,大家好了解。我們呢,現在有一個汽車對象,我們可以知道啊,汽車這個東西是很複雜的,裡面有車輪子、發動機、電瓶、車架子......,很多很多啊,我們現在要執行個體化一下這個汽車對象,其實也是可以的,但是,成本、技術難度,太大太大。是以想要一次性直接執行個體化是不可選取的,我們可以這樣去做,将汽車這個對象進行分解,單獨去生産車輪子,單獨去生産發動機這些,最後一組裝,OK,汽車這個對象就完成了。而且,我們這個汽車還能做更換,好比現在車輪子是用的木頭的,我們呢可以将車輪子給他換成橡膠的。

建造者模式的優點和好處:

優點:

1. 各個具體的建造者互相獨立,有利于系統的擴充。

2. 用戶端不必知道産品内部組成的細節,便于控制細節風險。

好處:

建造者模式呢,将不變和變分離,也就是汽車本身是不變的,變得是車輪子,即産品的組成部分是不變的,但每一部分是可以靈活選擇的。

與工廠模式的差別:

建造者模式和工廠模式的關注點不同:建造者模式注重零部件的組裝過程,而工廠模式更注重零部件的建立過程,但兩者可以結合使用。

建造者模式的實作:

我們說這個實作之前,還需要說一個,就是建造者模式的組成。

建造者模式由産品、抽象建造者、具體建造者、指揮者這四個部分組成,然後我們來說一下這四個部分指代什麼東西

首先是産品,這個好了解,就是我們上面說的内個汽車。

其次是抽象建造者,這個就是一個接口,用來定義需要制造啥,但是不需要它去實作,具體的實作是由具體建造者去實作。

具體建造者,這個其實就不說了,就是實作剛剛抽閑建造者這個接口,然後去做具體的實作。

最後就是這個指揮者,指揮者就是用來調用具體建造者的,先建立啥,再建立啥,不然人家車輪子、發動機都造好了,發現沒有車架子不就尴尬了?

下面我們來用Java的代碼來說一下上面的這個造汽車。

1. 我們先來建立一個Car,這個就是上面的複雜對象。然後裡面現有很多零部件,比如說車輪子,發動機啥的。我們就不把他們定義成對象了,我就用String類型假裝一下。

Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:

2. 我們知道了這個汽車的組成之後,我們再來建立 抽象建造者。

Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:

這裡需要注意的是,我們這個汽車這個對象,外界隻能通過getCar()這個方法擷取,不能随便去拿。

原因很簡單,造一個汽車是很複雜的,我們不需要它知道這個造汽車多複雜,你如果需要調用我的方法擷取就好了。

我們把造這些車輪啊啥的方法都設定成抽象的,由具體建造者去實作。

3. 有了抽象建造者之後,我們就需要具體建造者去實作了。這裡我們來建立一個具體建造者。

Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:

然後我們來給每一個方法補充具體的内容。

Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:

4. 有了産品,有了抽象建造和,還有了具體建造者之後,我們還差一個指揮者,我們來建立一下指揮者。

Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:

指揮者呢,我們需要去指揮怎麼去建立,這裡我們來寫一下

Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:

我們定義一個carBuilder,因為我們需要去調用它,然後呢,我們用它來去建造這些個車輪子啊啥的,最後,我們傳回這個造好的車。

5. 最後,我們來寫一個測試類,我們來使用一下建造者模式

Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:

然後我們來運作一下

Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:

... 話說,這個不是我們想讓他輸出的,我們來重寫一下Car的toString()方法。然後再運作

Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:
Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:

到這裡為止,我們的建造者模式就學習完了,然後23種設計模式當中的建立型模式也就學習完成了,希望大家好好學習。

Java23種設計模式——5.建立型模式之建造者模式建造者模式:建造者模式的優點和好處:與工廠模式的差別:建造者模式的實作:

ps:上方二維碼是我個人的公衆号,最近剛開不久,我每個月都會更新一些活動,希望大家可以積極參加,活動詳情可以關注公衆号之後,回複“活動”二字進行檢視,參加。

繼續閱讀