設(shè)計模式之構(gòu)建(Builder)模式
構(gòu)建模式主要用來針對復(fù)雜產(chǎn)品生產(chǎn),分離部件構(gòu)建細(xì)節(jié),以達(dá)到良好的伸縮性。
考慮到設(shè)計模式來源于建筑學(xué),因此舉一個建造房子的例子。現(xiàn)在一個客戶要建造一棟房子House,




那么他首先需要一個設(shè)計師—Designer,但是設(shè)計師只能做設(shè)計,指示如何去建造房子,可是他并不會親自去做,那么就還需要一個施工隊伍BuildTeam,那么首先,Designer要設(shè)計出來如何去建造這棟房子,首先要施工隊打地基,然后施工隊要架骨架、接著上水泥等等(具體如何不得而知,需要請教專業(yè)人士),那么從這里我們可以知道設(shè)計師對施工隊是有要求的,那就是施工隊必須要會打地基、會架骨架、會上水泥等,因此得出如下招聘施工隊的要求:






從上可以看出,要想做這個工程的施工隊伍,必須首先符號上面的條件,會做上面所有的事情。根據(jù)設(shè)計師的設(shè)計,又得知設(shè)計師會向施工隊下達(dá)一個命令,然后施工隊按照設(shè)計師的要求開始施工:









由于從頭到尾都是設(shè)計師在下指令設(shè)計,而施工隊進(jìn)行實(shí)際施工,所以客戶最終會找施工隊驗(yàn)收房子,因此施工隊必須要交付房子給客戶,因此施工隊需要加上一個交付房子的條款,不然房子做成了,但是施工隊卻不交付給我,那不是吃虧了,因此:







好了,房子設(shè)計好了,如何做也設(shè)計好了,如今就差給誰來做了,現(xiàn)在有一個施工隊:











從施工隊的情況來看, 這個施工隊完全符合設(shè)計師對施工隊的要求,既接口BuildTeam,好,那么最終決定由他們來做,從頭到尾全部流程如下:




第一棟房子終于建成了,此時同一個客戶覺得這個設(shè)計師的設(shè)計不錯,于是決定還要使用他的設(shè)計并由他指示施工隊再造一棟同樣的房子,可是施工隊BuildTeamA突然獅子大開口,想要更多的錢,客戶為了節(jié)省成本,只好再次招聘一個新的施工隊進(jìn)行施工,剛好有個施工隊伍BuildTeamB符合要求,于是流程如下:



好了,第二棟房子也完成了,但是整個流程上并沒有太大的變動,由于使用了構(gòu)建模式,整個流程分工非常明確,客戶不需要參與任何設(shè)計以及建造,設(shè)計師只負(fù)責(zé)設(shè)計以及下命令,而施工隊也僅僅只負(fù)責(zé)具體的實(shí)現(xiàn)細(xì)節(jié),使得建造明細(xì)獨(dú)立出來,隨時更換不同的施工隊均可。