定義:將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。建造者模式是一種對象創(chuàng)建型模式。建造者模式一步一步創(chuàng)建一個復(fù)雜的對象,它允許用戶只通過指定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,用戶不需要知道內(nèi)部的具體構(gòu)建細(xì)節(jié)。
在建造者模式中,客戶端只需實例化指揮者類,指揮者類針對抽象建造者編程,客戶端根據(jù)需要傳入具體的建造者類型,指揮者將指導(dǎo)具體建造者一步一步構(gòu)造一個完整的產(chǎn)品(逐步調(diào)用具體建造者的buildX()方法),相同的構(gòu)造過程可以創(chuàng)建完全不同的產(chǎn)品。
Builder(抽象建造者):它為創(chuàng)建一個產(chǎn)品對象的各個部分提供一個抽象接口。
ConcreteBuilder(具體建造者):實現(xiàn)Builder接口,實現(xiàn)各個部分具體的建造方法。
Product(產(chǎn)品角色):是被構(gòu)建的對象,包括多個組成部分。
Director(指揮者):指揮者又被稱為導(dǎo)演類,它負(fù)責(zé)復(fù)雜對象的建造次序。
UML:
優(yōu)點:
(1) 在建造者模式中,客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解耦,使得相同的創(chuàng)建過程可以創(chuàng)建不同的產(chǎn)品對象。
(2) 每一個具體建造者都相對獨立,而與其他的具體建造者無關(guān),因此可以很方便地替換具體建造者或增加新的具體建造者,用戶使用不同的具體建造者即可得到不同的產(chǎn)品對象。由于指揮者類針對抽象建造者編程,增加新的具體建造者無須修改原有類庫的代碼,系統(tǒng)擴展方便,符合“開閉原則”
(3) 可以更加精細(xì)地控制產(chǎn)品的創(chuàng)建過程。將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中,使得創(chuàng)建過程更加清晰,也更方便使用程序來控制創(chuàng)建過程。
缺點:
會產(chǎn)生多余的Builder對象以及Director對象,消耗內(nèi)存;
對象的構(gòu)建過程暴露