一个更加简洁的 建造者模式
<?php /** * 建造者模式 * 将一个复杂对象的构造与它的表示分离,是同样的构建过程可以创建不同的表示; * 目的是为了消除其他对象复杂的创建过程 */ /** * 产品,包含产品类型、价钱、颜色属性 */ class Product { public $_type = null; public $_price = null; public $_color = null; //建造产品的类型 public function setType($type) { echo 'set the type of the product,'; $this->_type = $type; } //建造产品的价格 public function setPrice($price) { echo 'set the price of the product,'; $this->_price = $price; } //建造产品的颜色 public function setColor($color) { echo 'set the color of the product,'; $this->_color = $color; } } /*将要建造的,目标对象的参数*/ $config = array ( 'type' => 'shirt', 'price' => 100, 'color' => 'red', ); /*不使用建造者模式*/ $product = new Product(); $product->setType($config['type']); $product->setPrice($config['price']); $product->setColor($config['color']); //var_dump($product); /** * builder类--使用建造者模式 */ class ProductBuilder { public $_config = null; public $_object = null; public function ProductBuilder($config) { $this->_object = new Product();//在这里借用具体生产过程的对象 $this->_config = $config; } public function build() { echo '建造类开始工作了:'; $this->_object->setType($this->_config['type']); $this->_object->setPrice($this->_config['price']); $this->_object->setColor($this->_config['color']); } public function getProduct() { return $this->_object; } } $objBuilder = new ProductBuilder($config);//新建一个建造者 $objBuilder->build();//建造者去建造 $objProduct = $objBuilder->getProduct();//建造者返回-它建造的东西 var_dump($objProduct); ?>