layout | title | date | author | desc | in_head |
---|---|---|---|---|---|
post
|
PHP设计模式之建造者模式
|
2018-03-13 10:00:02 +0800
|
南丞
|
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
|
<style> .article-content p{ text-indent: 2em; line-height: 1.75rem; }</style>
|
建造者模式
<?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();