天天看點

【秒懂設計模式】建造者模式

 秒懂設計模式——建造者模式

(四)建造者模式

1.先解釋一下,什麼是建造者模式呢?

【官方定義】将一個複雜對象的建構,與它的表示分離,使得同樣的建構過程可以建立不同的表示。

【了解】官方定義過于抽象,讓我們把它做一個拆分,分解成四個方面了解:

①複雜對象的表示;

②複雜對象的建構過程;

③可分離的通用建構過程,也适用于其它複雜對象的表示;

④适用于一些基本部件不會變,而其組合經常變化的時候。

2.接着,讓我們再伴随一個例子,進一步清晰的了解這個定義:

【舉例】常去kfc的朋友,一般都會發現,其實它的很多食品組合都能構成套餐,但是它們的包裝組合卻很少變動,比如:“[盒裝]香辣漢堡+[杯裝]可樂”是一個套餐;再比如:“[盒裝]奧爾良烤腿堡+[杯裝]雪頂咖啡”也是一個套餐。

3.我們按照上面所說的4個方面,從建造者的設計角度,分析一下這個例子:

①複雜對象的表示:kfc套餐;

②複雜對象的建構過程:盒裝+杯裝;

③可分離的通用建構過程,也适用于其它複雜對象的表示:不同的包裝可以放不同的食物;

④适用于一些基本部件不會變(包裝組合不變),而其組合經常變化的時候(包裝内的食品組合經常變化)。

4.我們準備用java代碼來,以建造者模式來實作這一下這個例子。

【java代碼】

①建立食品抽象接口

②建立食品包裝抽象接口

③建立漢堡抽象類,并實作食品接口,并重寫食品包裝方法

建立飲料抽象類,并實作食品接口,并重寫食品包裝方法

④建立香辣雞腿堡具體産品類,并繼漢堡類建立飲料抽象類,并實作食品接口,并重寫食品包裝方法

建立奧爾良烤腿堡具體産品類,并繼漢堡類

⑤建立可口可樂具體産品類,并繼承飲料類

建立雪頂咖啡具體産品類,并繼承飲料類

⑥建立套餐的過程

⑦實際套餐的建立者

⑧顧客登場,開始點餐

⑨控制台輸出結果

5.分析:以上就是建造者模式的java實作過程,下面用畫圖的方式,梳理一下各種關系:

【秒懂設計模式】建造者模式

我們發現建造者模式有四個角色:

①builder:給出一個抽象接口,以規範産品對象的各個組成成分的建造。這個接口規定要實作複雜對象的哪些部分的建立,并不涉及具體的對象部件的建立。(食品抽象接口)

②concretebuilder:實作builder接口,針對不同的商業邏輯,具體化複雜對象的各部分的建立。 在建造過程完成後,提供産品的執行個體。(包裝抽象接口)

③product:要建立的複雜對象。(套餐類)

④director:調用具體建造者來建立複雜對象的各個部分,在指導者中不涉及具體産品的資訊,隻負責保證對象各部分完整建立或按某種順序建立。(實際套餐的建造者類)