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