秒懂設計模式——建造者模式
(四)建造者模式
1.先解釋一下,什麼是建造者模式呢?
【官方定義】将一個複雜對象的建構,與它的表示分離,使得同樣的建構過程可以建立不同的表示。
【了解】官方定義過于抽象,讓我們把它做一個拆分,分解成四個方面了解:
①複雜對象的表示;
②複雜對象的建構過程;
③可分離的通用建構過程,也适用于其它複雜對象的表示;
④适用于一些基本部件不會變,而其組合經常變化的時候。
2.接着,讓我們再伴随一個例子,進一步清晰的了解這個定義:
【舉例】常去kfc的朋友,一般都會發現,其實它的很多食品組合都能構成套餐,但是它們的包裝組合卻很少變動,比如:“[盒裝]香辣漢堡+[杯裝]可樂”是一個套餐;再比如:“[盒裝]奧爾良烤腿堡+[杯裝]雪頂咖啡”也是一個套餐。
3.我們按照上面所說的4個方面,從建造者的設計角度,分析一下這個例子:
①複雜對象的表示:kfc套餐;
②複雜對象的建構過程:盒裝+杯裝;
③可分離的通用建構過程,也适用于其它複雜對象的表示:不同的包裝可以放不同的食物;
④适用于一些基本部件不會變(包裝組合不變),而其組合經常變化的時候(包裝内的食品組合經常變化)。
4.我們準備用java代碼來,以建造者模式來實作這一下這個例子。
【java代碼】
①建立食品抽象接口
②建立食品包裝抽象接口
③建立漢堡抽象類,并實作食品接口,并重寫食品包裝方法
建立飲料抽象類,并實作食品接口,并重寫食品包裝方法
④建立香辣雞腿堡具體産品類,并繼漢堡類建立飲料抽象類,并實作食品接口,并重寫食品包裝方法
建立奧爾良烤腿堡具體産品類,并繼漢堡類
⑤建立可口可樂具體産品類,并繼承飲料類
建立雪頂咖啡具體産品類,并繼承飲料類
⑥建立套餐的過程
⑦實際套餐的建立者
⑧顧客登場,開始點餐
⑨控制台輸出結果
5.分析:以上就是建造者模式的java實作過程,下面用畫圖的方式,梳理一下各種關系:
我們發現建造者模式有四個角色:
①builder:給出一個抽象接口,以規範産品對象的各個組成成分的建造。這個接口規定要實作複雜對象的哪些部分的建立,并不涉及具體的對象部件的建立。(食品抽象接口)
②concretebuilder:實作builder接口,針對不同的商業邏輯,具體化複雜對象的各部分的建立。 在建造過程完成後,提供産品的執行個體。(包裝抽象接口)
③product:要建立的複雜對象。(套餐類)
④director:調用具體建造者來建立複雜對象的各個部分,在指導者中不涉及具體産品的資訊,隻負責保證對象各部分完整建立或按某種順序建立。(實際套餐的建造者類)