建造模式介紹
建造模式(Builder Pattern)是對象的創建模式。它可以將一個產品的內部表象與產品的生成過程分割開來,從而可以使一個建造過程生成具有不同的內部表象的產品對象。
由于建造零件的過程很復雜,因此,這些零件的建造過程往往被“外部化”到另一個乘坐建造者的對象里,建造者對象返還給客戶端的是一個全部零件都建造完畢的產品對象。它將產品的結構和建造過程對客戶端隱藏起來。
建造模式的四種角色:
1 builder:為創建一個產品對象的各個部件指定抽象接口。
2 ConcreteBuilder:實現Builder的接口以構造和裝配該產品的各個部件,定義并明確它所創建的表示,并 提供一個檢索產品的接口。
3 Director:構造一個使用Builder接口的對象。
4 Product:表示被構造的復雜對象。ConcreteBuilder創建該產品的內部表示并定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的接口。
php代碼實例:
- <?php
- /**
- * 產品,包含產品類型、價錢、顏色屬性
- */
- class Product
- {
- public $_type = null;
- public $_price = null;
- public $_color = null;
- public function setType($type){
- echo '設置產品類型';
- $this->_type = $type;
- }
- public function setPrice($price){
- echo '設置產品價格,';
- $this->_price = $price;
- }
- public function setColor($color){
- echo '設置產品顏色';
- $this->_color = $color;
- }
- }
- //不使用builder模式
- $product = new Product();
- $product->setType("衣服");
- $product->setPrice("100");
- $product->setColor("紅色");
- //使用builder模式
- class ProductBuilder{
- public $_config = null;
- public $_object = null;
- //$config 被設計為一個數組,格式
- //$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);
建造者模式的優點
首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產品類和建造者類是比較穩定的,因此,將主要的業務邏輯封裝在導演類中對整體而言可以取得比較好的穩定性。
其次,建造者模式很容易進行擴展。如果有新的需求,通過實現一個新的建造者類就可以完成,基本上不用修改之前已經測試通過的代碼,因此也就不會對原有功能引入風險。
建造者模式與工廠模式的區別
我們可以看到,建造者模式與工廠模式是極為相似的,總體上,建造者模式僅僅只比工廠模式多了一個“導演類”的角色。在建造者模式的類圖中,假如把這個導演類看做是最終調用的客戶端,那么圖中剩余的部分就可以看作是一個簡單的工廠模式了。
與工廠模式相比,建造者模式一般用來創建更為復雜的對象,因為對象的創建過程更為復雜,因此將對象的創建過程獨立出來組成一個新的類——導演類。也就是說,工廠模式是將對象的全部創建過程封裝在工廠類中,由工廠類向客戶端提供最終的產品;而建造者模式中,建造者類一般只提供產品類中各個組件的建造,而將具體建造過程交付給導演類。由導演類負責將各個組件按照特定的規則組建為產品,然后將組建好的產品交付給客戶端。
總結
建造者模式與工廠模式類似,他們都是建造者模式,適用的場景也很相似。一般來說,如果產品的建造很復雜,那么請用工廠模式;如果產品的建造更復雜,那么請用建造者模式。
新聞熱點
疑難解答