若转载教程,请注明出自SW-X框架官方文档!
<?php
/**
* 设计模式之建造者模式
* 小黄牛
*/
header("Content-type: text/html; charset=utf-8");
/**
* 实体 - 产品角色 - 汽车
*/
class Car{
public $_head; // 车头
public $_door; // 车门
public $_foot; // 车尾
public function show(){
echo "车头的颜色:{$this->_head}<br/>";
echo "车门的颜色:{$this->_door}<br/>";
echo "车尾的颜色:{$this->_foot}<br/>";
}
}
/**
* 抽象 - 汽车的建造者
*/
abstract class CarBuilder{
protected $_car; // 汽车实例
public function __construct(){
$this->_car = new Car();
}
abstract function BuildHead(); // 改变车头颜色
abstract function BuildDoor(); // 改变车门颜色
abstract function BuildFoot(); // 改变车尾颜色
abstract function GetBird(); // 返回汽车实例
}
# 具体化 - 建造者 - 蓝色宝马
class BlueCar extends CarBuilder{
public function BuildHead(){$this->_car->_head = '蓝色';}
public function BuildDoor(){$this->_car->_door = '蓝色';}
public function BuildFoot(){$this->_car->_foot = '蓝色';}
public function GetBird(){return $this->_car;}
}
# 具体化 - 建造者 - 红色宝马
class RedCar extends CarBuilder{
public function BuildHead(){$this->_car->_head = '红色';}
public function BuildDoor(){$this->_car->_door = '红色';}
public function BuildFoot(){$this->_car->_foot = '红色';}
public function GetBird(){return $this->_car;}
}
/**
* 实体 - 指挥者
*/
class Director{
# 执行改造
public function Construct($_builder){
$_builder->BuildHead();
$_builder->BuildDoor();
$_builder->BuildFoot();
return $_builder->GetBird();
}
}
# 测试
$director = new Director();
echo '蓝色宝马的车辆信息: <br/>';
$blue_car = $director->Construct(new BlueCar());
$blue_car->Show();
echo '<br/>';
echo '红色宝马的车辆信息: <br/>';
$red_car = $director->Construct(new RedCar());
$red_car->Show();
浏览器输出
蓝色宝马的车辆信息:
车头的颜色:蓝色
车门的颜色:蓝色
车尾的颜色:蓝色
红色宝马的车辆信息:
车头的颜色:红色
车门的颜色:红色
车尾的颜色:红色
建造者模式
1.产品角色,产品角色定义自身的组成属性
2.抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品
3.具体建造者,具体建造者实现了抽象建造者创建产品过程的方法,给产品的具体属性进行赋值定义
4.指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品
应用场景
建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。