<?php
/*规范制造各个零件的接口*/
interface Builder
{
public function buildMapPart();//制造地图零件
public function buildBuildingPart();//制造建筑零件
public function buildArmyPart();//制造部队零件
public function getResult();//组装零件
}
/*实际建造器类,比如初始化某个任务关*/
class ConcreteBuilder implements Builder
{
public function buildMapPart() //制造地图-零件
{
echo '地图零件
';
}
public function buildBuildingPart() //制造建筑-零件
{
echo '建筑零件
';
}
public function buildArmyPart() //制造部队-零件
{
echo '部队零件
';
}
public function getResult() //组装零件-成为成品
{
echo '组装零件
';
}
}
//实际建造类,建造另一种场景
class GaoyuanBuilder implements Builder
{
public function buildMapPart()
{
echo '2号高原地图';
}
public function buildBuildingPart()
{
echo '防风碉堡';
}
public function buildArmyPart()
{
echo '机械化步兵';
}
public function getResult()
{
echo '组装零件:高原地图+碉堡+机械化步兵!';
}
}
//监督类,也就是控制绘制流程的类
class Director
{
private $builder;//私有属性,确定使用的建造器
//构造方法,参数为选定的建造器对象
public function __construct($builder)
{
//确定使用的建造器
$this->builder = $builder;
}
//负责建造流程的方法,调用建造器对象的方法,制造所有零件
public function buildeAllPart()
{
//制造地图零件
$this->builder->buildMapPart();
//制造建筑零件
$this->builder->buildBuildingPart();
//制造部队零件
$this->builder->buildArmyPart();
}
}
$concreteBuilder = new ConcreteBuilder();//假设根据任务关,初始化我们需要的实际建造器对象
$director = new Director($concreteBuilder);//初始化一个监督对象
$director->buildeAllPart();//制造所有零件
$concreteBuilder->getResult();//最后让建造器组装零件,生成画面
//建造另一种场景
$gaoyuanBuilder = new GaoyuanBuilder();//假设根据任务关,初始化我们需要的实际建造器对象
$director = new Director($gaoyuanBuilder);//初始化一个监督对象
$director->buildeAllPart();//制造所有零件
$gaoyuanBuilder->getResult();//最后让建造器组装零件,生成画面
?>
用途总结:建造器模式可以将流程和细节分离,各司其职。
实现总结:需要一个建造器接口或者抽象类,负责规范各个方法,比如上面的Builder。然后让实际的建造器类去实现所有的方法,比如上面的ConcreteBuilder。同时需要负责流程管理的监督类,比如上面的Director,负责调用建造器的各个零件制造方法。最后让建造器去组装所有的零件。
主要是在于建造各个不同的东西时,方便。比如建造地图,士兵,建造???还不懂