- 重學Java設計模式
- 付政委(小付哥)
- 795字
- 2021-05-19 18:10:00
6.5 建造者模式重構代碼
在軟件系統開發中,有時會面臨一個復雜對象的創建工作,其通常由各個部分的子對象用一定過程構建出來,隨著需求的迭代,這個復雜對象的各個部分經常面臨重大的變化,但是將它們組合在一起的過程卻相對穩定,這種場景就適合用建造者模式。
這里會把構建的過程交給創建者類,而創建者通過使用構建工具包構建出不同的裝修套餐。
6.5.1 工程結構

建造者模式代碼類關系如圖6-3所示。

圖6-3
建造者模式代碼工程有三個核心類,這三個核心類是建造者模式的具體實現。與使用if…else判斷方式實現邏輯相比,它額外新增了兩個類,具體功能如下:
·Builder:建造者類具體的各種組裝,都由此類實現。
·DecorationPackageMenu:是IMenu接口的實現類,主要承載建造過程中的填充器,相當于一套承載物料和創建者中間銜接的內容。
也可以從裝修材料參考圖的視角看待這類工程,更便于理解,如圖6-4所示。

圖6-4
接下來分別介紹幾個類的功能的具體實現方式。
6.5.2 定義裝修包接口

接口類定義了填充吊頂、涂料、地板、地磚各種材料的方法,以及最終提供獲取全部明細的方法。
6.5.3 實現裝修包接口



在裝修包的實現中,每一種方法都返回了this對象本身,可以非常方便地用于連續填充各種物料。同時,在填充時也會根據物料計算相應面積的報價,吊頂和涂料按照面積乘以單價計算。最后,同樣提供了統一的獲取裝修清單的明細方法。
6.5.4 建造者類創建

最后,在建造者的使用中就已經非常容易了。統一的建造方式通過不同物料填充出不同的裝修風格:豪華歐式、輕奢田園和現代簡約。如果公司擴展業務,也可以將這部分內容配置到數據庫中自動生成,但整體過程仍然可以使用建造者模式的思想進行搭建。
6.5.5 測試驗證
1.單元測試


在單元測試中,使用建造者模式分別創建出三種裝修套餐的價格,獲取詳情信息并進行輸出。
·levelOne、levelTwo、levelThree 對應三種裝修風格:豪華歐式、輕奢田園和現代簡約。
·入參的信息是房屋面積,最終獲取裝修報價單。實際的業務場景會更復雜,這里的案例主要展示最核心的邏輯。
2.測試結果

