建造者模式讲解
我們來(lái)學(xué)習(xí)建造者模式,首先我們來(lái)看一下建造者的定義和類型,定義是將一個(gè)復(fù)雜對(duì)象的構(gòu)建與他的表示進(jìn)行分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示,定義相對(duì)抽象一些,但是一會(huì)我們使用的時(shí)候,就會(huì)知道這段定義的含義,這里面是說(shuō)建造者的一個(gè)特征,用戶只需知道建造的類型就可以得到他們,建造過(guò)程及細(xì)節(jié)呢,是不需要知道的,他的類型是屬于創(chuàng)建型的,那這個(gè)定義通俗的講,就是說(shuō)建造者模式,就是構(gòu)建一個(gè)包含多個(gè)組件,相同的構(gòu)建過(guò)程呢可以創(chuàng)建不同的產(chǎn)品,那比較適合于哪些流程比較固定,但是順序不一定固定的,那第二條這個(gè)特征是說(shuō),對(duì)象的創(chuàng)建過(guò)程及細(xì)節(jié)呢,我不需要知道,但是我同樣可以創(chuàng)建復(fù)雜的對(duì)象,打個(gè)比方,我們做一盤菜,那一盤菜構(gòu)建過(guò)程相對(duì)復(fù)雜,有的喜歡先放鹽,也有的喜歡后放鹽的,但是放鹽這個(gè)組件,一定要加的,那我們接著看一下
建造者的適用場(chǎng)景,如果一個(gè)對(duì)象有非常復(fù)雜的內(nèi)部結(jié)構(gòu),我們可以理解他有很多很多的屬性,或者需要一個(gè)很復(fù)雜的步驟,并且想把復(fù)雜的對(duì)象的創(chuàng)建和使用進(jìn)行分離,這兩種場(chǎng)景都比較適合使用建造者
我們接著來(lái)看一下建造者的優(yōu)點(diǎn)是什么,封裝性好,創(chuàng)建和使用分離,這個(gè)很容易理解,第二個(gè)擴(kuò)展性好,建造類之間可以獨(dú)立,在一定程度上解耦,那在后續(xù)的coding,也能看到,在mybatis里面,符合應(yīng)用建造者模式,在建造者模式中,那他主要的目的就是為了獨(dú)立和解耦
他的缺點(diǎn)是什么呢,會(huì)產(chǎn)生多余的Builder對(duì)象,產(chǎn)品內(nèi)部如果發(fā)生變化的話,那我們的建造者也要修改,成本可能會(huì)根據(jù)業(yè)務(wù)場(chǎng)景變大或者變小,總之這一點(diǎn)也是建造者的缺點(diǎn),那再?gòu)?qiáng)調(diào)一下,設(shè)計(jì)模式講究的是一個(gè)平衡,和業(yè)務(wù)模型的一個(gè)匹配
那建造者模式和工廠模式比較相近,他們之間的區(qū)別,首先建造者模式更注重于方法的調(diào)用順序,工廠模式更注重于創(chuàng)建產(chǎn)品,另外一個(gè)創(chuàng)建對(duì)象的力度不同,建造者可以創(chuàng)建一些復(fù)雜的產(chǎn)品,由各種復(fù)雜的部件組成,工廠模式創(chuàng)建出來(lái)的都是一個(gè)樣的,另外一個(gè)關(guān)注點(diǎn),工廠模式注重是要把這個(gè)產(chǎn)品創(chuàng)建出來(lái)就OK了,而建造者模式,不只是要?jiǎng)?chuàng)建這個(gè)產(chǎn)品,我還需要知道這個(gè)產(chǎn)品是由哪些部件組成的,那建造者模式在某些場(chǎng)景,比如一定的順序絕對(duì)產(chǎn)品不一樣的話,那這里也要把順序進(jìn)行調(diào)整,工廠則不關(guān)心順序
?
總結(jié)
- 上一篇: 抽象工厂源码解析
- 下一篇: 建造者模式 coding