建造模式(Builder Pattern)是對(duì)象的創(chuàng)建模式。它可以將一個(gè)產(chǎn)品的內(nèi)部表象與產(chǎn)品的生成過(guò)程分割開(kāi)來(lái),從而可以使一個(gè)建造過(guò)程生成具有不同的內(nèi)部表象的產(chǎn)品對(duì)象。
由于建造零件的過(guò)程很復(fù)雜,因此,這些零件的建造過(guò)程往往被“外部化”到另一個(gè)乘坐建造者的對(duì)象里,建造者對(duì)象返還給客戶端的是一個(gè)全部零件都建造完畢的產(chǎn)品對(duì)象。它將產(chǎn)品的結(jié)構(gòu)和建造過(guò)程對(duì)客戶端隱藏起來(lái)。
建造模式的四種角色:
1 builder:為創(chuàng)建一個(gè)產(chǎn)品對(duì)象的各個(gè)部件指定抽象接口。
2 ConcreteBuilder:實(shí)現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個(gè)部件,定義并明確它所創(chuàng)建的表示,并 提供一個(gè)檢索產(chǎn)品的接口。
3 Director:構(gòu)造一個(gè)使用Builder接口的對(duì)象。
4 Product:表示被構(gòu)造的復(fù)雜對(duì)象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過(guò)程,包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。
php代碼實(shí)例 ?php * 產(chǎn)品,包含產(chǎn)品類型、價(jià)錢、顏色屬性html' target='_blank'>class Productpublic $_type = null;public $_price = null;public $_color = null;public function setType($type){echo 設(shè)置產(chǎn)品類型 $this- _type = $type;public function setPrice($price){echo 設(shè)置產(chǎn)品價(jià)格, $this- _price = $price; public function setColor($color){echo 設(shè)置產(chǎn)品顏色 $this- _color = $color;//不使用builder模式$product = new Product();$product- setType( 衣服 $product- setPrice( 100 $product- setColor( 紅色 //使用builder模式class ProductBuilder{public $_config = null;public $_object = null;//$config 被設(shè)計(jì)為一個(gè)數(shù)組,格式//$config = array( type = xx , price = xx , color = xx public function ProductBuilder($config){$this- _object = new Product();$this- _config = $config;public function build(){echo br / 使用建造者模式: br / $this- _object- setType($this- _config[ type $this- _object- setPrice($this- _config[ price $this- _object- setColor($this- _config[ color public function getProduct(){return $this- _object;$config = array( type = 汽車 , price = 2000000 , color = 白色 $objBuilder = new ProductBuilder($config);$objBuilder- build();$objProduct = $objBuilder- getProduct();echo br / var_dump($objProduct);
建造者模式的優(yōu)點(diǎn)
首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場(chǎng)景中,一般產(chǎn)品類和建造者類是比較穩(wěn)定的,因此,將主要的業(yè)務(wù)邏輯封裝在導(dǎo)演類中對(duì)整體而言可以取得比較好的穩(wěn)定性。
其次,建造者模式很容易進(jìn)行擴(kuò)展。如果有新的需求,通過(guò)實(shí)現(xiàn)一個(gè)新的建造者類就可以完成,基本上不用修改之前已經(jīng)測(cè)試通過(guò)的代碼,因此也就不會(huì)對(duì)原有功能引入風(fēng)險(xiǎn)。
建造者模式與工廠模式的區(qū)別
我們可以看到,建造者模式與工廠模式是極為相似的,總體上,建造者模式僅僅只比工廠模式多了一個(gè)“導(dǎo)演類”的角色。在建造者模式的類圖中,假如把這個(gè)導(dǎo)演類看做是最終調(diào)用的客戶端,那么圖中剩余的部分就可以看作是一個(gè)簡(jiǎn)單的工廠模式了。
與工廠模式相比,建造者模式一般用來(lái)創(chuàng)建更為復(fù)雜的對(duì)象,因?yàn)閷?duì)象的創(chuàng)建過(guò)程更為復(fù)雜,因此將對(duì)象的創(chuàng)建過(guò)程獨(dú)立出來(lái)組成一個(gè)新的類——導(dǎo)演類。也就是說(shuō),工廠模式是將對(duì)象的全部創(chuàng)建過(guò)程封裝在工廠類中,由工廠類向客戶端提供最終的產(chǎn)品;而建造者模式中,建造者類一般只提供產(chǎn)品類中各個(gè)組件的建造,而將具體建造過(guò)程交付給導(dǎo)演類。由導(dǎo)演類負(fù)責(zé)將各個(gè)組件按照特定的規(guī)則組建為產(chǎn)品,然后將組建好的產(chǎn)品交付給客戶端。
總結(jié)
建造者模式與工廠模式類似,他們都是建造者模式,適用的場(chǎng)景也很相似。一般來(lái)說(shuō),如果產(chǎn)品的建造很復(fù)雜,那么請(qǐng)用工廠模式;如果產(chǎn)品的建造更復(fù)雜,那么請(qǐng)用建造者模式。
以上就是建造者模式是什么?的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選