若转载教程,请注明出自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.指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品
应用场景
建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
