深圳建設(shè)集團是國企嗎seochan是什么意思
文章目錄
- 蓋房項目需求
- 傳統(tǒng)方式解決蓋房需求
- 傳統(tǒng)方式的問題分析
- 建造者模式概述
- 是建造者模式的四個角色
- 建造者模式原理類圖
- 建造者模式的注意事項和細節(jié)
蓋房項目需求
- 需要建房子:這一過程為打樁、砌墻、封頂
- 房子有各種各樣的,比如普通房,高樓,別墅,各種房子的過程雖然一樣,但是要求不要相同的.
- 請編寫程序,完成需求.
傳統(tǒng)方式解決蓋房需求
- 思路分析(圖解)
-
代碼展示
- 根據(jù)類圖,創(chuàng)建抽象類
- 創(chuàng)建CommonHouse類繼承抽象類
- 創(chuàng)建客戶端
傳統(tǒng)方式房子的建設(shè)功能
https://gitee.com/luan_hao/design-pattern/blob/master/src/main/java/com/lh/builder/AbstractHouse.java
傳統(tǒng)方式普通房子
https://gitee.com/luan_hao/design-pattern/blob/master/src/main/java/com/lh/builder/CommonHouse.java
傳統(tǒng)方式客戶端
https://gitee.com/luan_hao/design-pattern/blob/master/src/main/java/com/lh/builder/Client.java
傳統(tǒng)方式的問題分析
-
優(yōu)點是比較好理解,簡單易操作。
-
設(shè)計的程序結(jié)構(gòu),過于簡單,沒有設(shè)計緩存層對象,程序的擴展和維護不好. 也就是說,這種設(shè)計方案,把產(chǎn)品(即:房子) 和 創(chuàng)建產(chǎn)品的過程(即:建房子流程) 封裝在一起,耦合性增強了。
-
解決方案:將產(chǎn)品和產(chǎn)品建造過程解耦 => 建造者模式.
建造者模式概述
建造者模式(Builder Pattern)是一種創(chuàng)建型設(shè)計模式,用于將一個復(fù)雜對象的構(gòu)建過程與其表示分離,從而使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。這種模式的主要目標(biāo)是將一個復(fù)雜對象的構(gòu)建步驟進行解耦,使得構(gòu)建過程更加靈活,并且可以通過不同的步驟組合來創(chuàng)建不同的對象。
基本上,建造者模式將對象的構(gòu)建過程分為多個步驟,每個步驟由一個具體的建造者類負責(zé)實現(xiàn)。然后,一個指揮者類負責(zé)協(xié)調(diào)這些建造者,按照特定的順序和組合來執(zhí)行建造步驟,最終生成所需的復(fù)雜對象。
是建造者模式的四個角色
產(chǎn)品(Product):表示正在構(gòu)建的復(fù)雜對象。該對象由不同部分組成,建造者模式將對象的創(chuàng)建和表示分離,使得可以創(chuàng)建不同部分組合的產(chǎn)品。
抽象建造者(Abstract Builder):定義了構(gòu)建產(chǎn)品的抽象接口/抽象類,包括各個部分的構(gòu)建方法,以及返回產(chǎn)品的方法。
具體建造者(Concrete Builder):實現(xiàn)了抽象建造者的接口/抽象類,負責(zé)實際構(gòu)建產(chǎn)品的各個部分。每個具體建造者可以有不同的實現(xiàn),用于構(gòu)建不同的產(chǎn)品組合。
指揮者(Director):負責(zé)協(xié)調(diào)具體建造者的執(zhí)行順序,以及執(zhí)行建造的步驟。客戶端通過指揮者來創(chuàng)建產(chǎn)品,而不需要直接與具體建造者交互。它主要有兩個作用,一是:隔離了客戶與對象的生產(chǎn)過程,二是:負責(zé)控制產(chǎn)品對象的生產(chǎn)過程。
建造者模式原理類圖
建造者模式解決蓋房需求應(yīng)用實例
- 需要建房子:這一過程為打樁、砌墻、封頂。不管是普通房子也好,別墅也好都需要經(jīng)歷這些過程,下面我們
使用建造者模式(Builder Pattern)來完成 - 思路分析圖解(類圖)
- 代碼實現(xiàn)
產(chǎn)品 ——> 也就是房子
https://gitee.com/luan_hao/design-pattern/blob/master/src/main/java/com/lh/builder/improve/House.java
建造者
https://gitee.com/luan_hao/design-pattern/blob/master/src/main/java/com/lh/builder/improve/HouseBuilder.java
指揮者
https://gitee.com/luan_hao/design-pattern/blob/master/src/main/java/com/lh/builder/improve/HouseDirector.java
高樓房子
https://gitee.com/luan_hao/design-pattern/blob/master/src/main/java/com/lh/builder/improve/HighBuilding.java
普通房子
https://gitee.com/luan_hao/design-pattern/blob/master/src/main/java/com/lh/builder/improve/CommonHouse.java
客戶端:
https://gitee.com/luan_hao/design-pattern/blob/master/src/main/java/com/lh/builder/improve/Client.java
建造者模式的注意事項和細節(jié)
-
客戶端(使用程序)不必知道產(chǎn)品內(nèi)部組成的細節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解耦,使得相同的創(chuàng)建過程可
以創(chuàng)建不同的產(chǎn)品對象 -
每一個具體建造者都相對獨立,而與其他的具體建造者無關(guān),因此可以很方便地替換具體建造者或增加新的具
體建造者, 用戶使用不同的具體建造者即可得到不同的產(chǎn)品對象 -
可以更加精細地控制產(chǎn)品的創(chuàng)建過程 。將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中,使得創(chuàng)建過程更加清晰,
也更方便使用程序來控制創(chuàng)建過程 -
增加新的具體建造者無須修改原有類庫的代碼,指揮者類針對抽象建造者類編程,系統(tǒng)擴展方便,符合 “開閉
原則” -
建造者模式所創(chuàng)建的產(chǎn)品一般具有較多的共同點,其組成部分相似,如果產(chǎn)品之間的差異性很大,則不適合使
用建造者模式,因此其使用范圍受到一定的限制。 -
如果產(chǎn)品的內(nèi)部變化復(fù)雜,可能會導(dǎo)致需要定義很多具體建造者類來實現(xiàn)這種變化,導(dǎo)致系統(tǒng)變得很龐大,因
此在這種情況下,要考慮是否選擇建造者模式. -
抽象工廠模式 VS 建造者模式
抽象工廠模式實現(xiàn)對產(chǎn)品家族的創(chuàng)建,一個產(chǎn)品家族是這樣的一系列產(chǎn)品:具有不同分類維度的產(chǎn)品組合,采用抽象工廠模式不需要關(guān)心構(gòu)建過程,只關(guān)心什么產(chǎn)品由什么工廠生產(chǎn)即可。而建造者模式則是要求按照指定的藍圖建造產(chǎn)品,它的主要目的是通過組裝零配件而產(chǎn)生一個新產(chǎn)品