建造模式介紹
建造模式(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);
建造者模式的優點
首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產品類和建造者類是比較穩定的,因此,將主要的業務邏輯封裝在導演類中對整體而言可以取得比較好的穩定性。
其次,建造者模式很容易擴充。如果有新的需求,透過實現一個新的建造者類別就可以完成,基本上不用修改先前已經測試通過的程式碼,因此也就不會對原有功能引入風險。
建造者模式與工廠模式的區別
我們可以看到,建造者模式與工廠模式是極為相似的,總體上,建造者模式僅僅只比工廠模式多了一個「導演類」的角色。在建造者模式的類別圖中,假如把這個導演類別看做是最終調用的客戶端,那麼圖中剩餘的部分就可以看作是一個簡單的工廠模式了。
與工廠模式相比,建造者模式一般用來創建更為複雜的對象,因為對象的創建過程更為複雜,因此將對象的創建過程獨立出來組成一個新的類別——導演類。也就是說,工廠模式是將物件的全部創建過程封裝在工廠類別中,由工廠類別向客戶端提供最終的產品;而建造者模式中,建造者類別一般只提供產品類別中各個組件的建造,而將具體建造過程交付給導演類。由導演類負責將各個組件依照特定的規則組成產品,然後將組成好的產品交付給客戶端。
總結
建造者模式與工廠模式類似,他們都是建造者模式,適用的場景也很相似。一般來說,如果產品的建造很複雜,那麼請用工廠模式;如果產品的建造更複雜,那麼請使用建造者模式。
以上是建造者模式是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!