建造者模式也稱生成器模式,核心思想是將一個復雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表示,這樣的設計模式被稱為建造者模式。
例如:汽車,他的發動機引擎有好多品牌,輪胎也有各種材質,內飾更是千奇百怪;鳥,他的頭、翅膀以及腳有各種顏色和形狀,在創建這種復雜對象的時候,我們建議使用建造者模式。
類圖:

建造者模式一般認為有四個角色:
1.產品角色,產品角色定義自身的組成屬性
2.抽象建造者,抽象建造者定義了產品的創建過程以及如何返回一個產品
3.具體建造者,具體建造者實現了抽象建造者創建產品過程的方法,給產品的具體屬性進行賦值定義
4.指揮者,指揮者負責與調用客戶端交互,決定創建什麼樣的產品
代碼:
_head}
;
echo 翅膀的顏色:{$this->_wing}
;
echo 腳的顏色:{$this->_foot}
;
}
}
/**抽象鳥的建造者(生成器)
* Class BirdBuilder
*/
abstract class BirdBuilder
{
protected $_bird;
function __construct()
{
$this->_bird=new Bird();
}
abstract function BuildHead();
abstract function BuildWing();
abstract function BuildFoot();
abstract function GetBird();
}
/**具體鳥的建造者(生成器) 藍鳥
* Class BlueBird
*/
class BlueBird extends BirdBuilder
{
function BuildHead()
{
// TODO: Implement BuilderHead() method.
$this->_bird->_head=Blue;
}
function BuildWing()
{
// TODO: Implement BuilderWing() method.
$this->_bird->_wing=Blue;
}
function BuildFoot()
{
// TODO: Implement BuilderFoot() method.
$this->_bird->_foot=Blue;
}
function GetBird()
{
// TODO: Implement GetBird() method.
return $this->_bird;
}
}
/**玫瑰鳥
* Class RoseBird
*/
class RoseBird extends BirdBuilder
{
function BuildHead()
{
// TODO: Implement BuildHead() method.
$this->_bird->_head=Red;
}
function BuildWing()
{
// TODO: Implement BuildWing() method.
$this->_bird->_wing=Black;
}
function BuildFoot()
{
// TODO: Implement BuildFoot() method.
$this->_bird->_foot=Green;
}
function GetBird()
{
// TODO: Implement GetBird() method.
return $this->_bird;
}
}
/**指揮者
* Class Director
*/
class Director
{
/**
* @param $_builder 建造者
* @return mixed 產品類:鳥
*/
function Construct($_builder)
{
$_builder->BuildHead();
$_builder->BuildWing();
$_builder->BuildFoot();
return $_builder->GetBird();
}
}
header(Content-Type:text/html;charset=utf-8); //------------------------生成器模式測試代碼------------------ require_once ./Builder/Builder.php; $director=new Director(); echo 藍鳥的組成: