Heim > Backend-Entwicklung > PHP-Tutorial > PHP设计模式之建造者模式

PHP设计模式之建造者模式

WBOY
Freigeben: 2016-06-23 13:03:18
Original
960 Leute haben es durchsucht

建造者模式属于创建型模式

概述:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

优点:

建造者模式可以很好的将一个对象的实现与相关的‘业务’逻辑分离开来,从而可以在不改变事件逻辑的前提下,使增加(或改变)实现变得非常容易

缺点:

建造者接口的修改会导致所有执行类的修改

以下情况应该使用建造者:

1 需要生成的产品对象有复杂的内部结构

2 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序

3 在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品的创建过程中不易得到

使用建造者模式主要有一下效果:

1 建造者模式的使用使得产品的内部表象可以独立的变化,使用建造者模式可以使客户端不必知道产品内部组成的细节

2 每一个Builder都相对独立,而与其他的Builder无关

3 模式所建造的最终产品更易于控制

class Product{

public $type = null;

public $price = null;

public $color = null;

public function setType($type){

$this->type = $type;

}

public function setPrice($price){

$this->price = $price;

}

public function setColor($color){

$this->color = $color;

}

}

$config = array(

'type' => 'shirt',

'price' => 100,

'color' => 'red',

);

// 不使用builder模式

$product = new Product();

$product->setType($config['type']);

$product->setPrice($config['price']);

$product->setColor($config['color']);

使用builder模式

/*builder类*/

class ProductBuilder{

public $config = null;

public $object = null;

public function __construct($config){

$this->object = new Product();

$this->config = $config;

}

public function build(){

$this->object->setType($this->config['type']);

$this->object->setPrice($this->config['price']);

$this->object->setColor($this->config['color']);

}

public fuction getProduct(){

return $this->object;

}

}

$objBuilder = new ProductBuilder($config);

$objBuilder->build();

$objProduct = $objBuilder->getProduct();

var_dump($objProduct);

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage