轉(zhuǎn)載請注明作者和出處:http://www.itdecent.cn/p/483cd7c082dc
運(yùn)行平臺: Windows
php版本: php7.0
作者簡介: 一個(gè)本該成為游戲職業(yè)選手卻被編程耽誤的程序員
建造者模式:將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。它允許用戶指通過指定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,用戶不需要知道內(nèi)部的具體構(gòu)建細(xì)節(jié)。
主要角色:
抽象建造者:Builder
具體建造者:ConcreteBuilder
指揮者:Director
產(chǎn)品角色:Product
<?php
//產(chǎn)品抽象模型
class Person{
public $age;
public $sex;
}
//抽象類建造者
abstract class Builder{
public $person;
public abstract function setAge();
public abstract function setSex();
public function __construct(Person $person){
$this->person = $person;
}
public function getPerson(){
return $this->person;
}
}
//男人
class ManBuilder extends Builder{
public function setAge()
{
$this->person->age = 20;
}
public function setSex()
{
$this->person->sex = '男';
}
}
//女人
class WoMenBuilder extends Builder{
public function setAge()
{
$this->person->age = 20;
}
public function setSex()
{
$this->person->sex = '女';
}
}
//建造指揮者
class Director{
private $builder;
public function __construct(Builder $builder)
{
$this->builder = $builder;
}
public function built(){
$this->builder->setAge();
$this->builder->setSex();
}
}
$manBuilder = new ManBuilder(new Person());//構(gòu)建男人建造者
$director = new Director($manBuilder);//構(gòu)建指揮者
$director->built();//建造指揮
$man = $manBuilder->getPerson();//獲取男人
var_dump($man);
輸出結(jié)果:
object(Person)#2 (2) {
["age"]=>
int(20)
["sex"]=>
string(3) "男"
}
建造者和抽象工廠很像,兩者沒什么大的區(qū)別,建造者比抽象多了一個(gè)導(dǎo)演,可以用來創(chuàng)建更復(fù)雜的產(chǎn)品。d d