创造型模式,也可以叫做生成器模式,用来创建对象,<br />将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以构建不同的表示,<br />举个例子:建房子 ,都需要打地基,然后建房子,装修,流程不变,但是每个流程的具体实现细节是改变的,创建者好处就是保证了流程是不变的,不会增加也不会遗漏错误之类的,<br />角色:<br />builder:抽象接口,规范产品对象的各个组成部分的建造,规定要 实现复杂对象的那些部分的创建,并不涉及具体的对象部件的创建<br />ConcreateBuilder:实现builder 接口针对不同的商业逻辑,具体化复杂对象的各部分的创建,再建造过程完成后,提供产品的实例<br />Director:调用具体建造者来创建复杂对象的各个部分,在指导者种不涉及具体产品的信息,只负责保证对象各部分完整创建或者按某种顺序创建<br />Product:要创建复杂对象<br />通俗点将<br />创建一个产品,创建一个接口,实例化接口,实例化接口中调用产品类的方法,返回产品实例,然后建一个创造者类,调用实例化接口,按照顺序执行实例化接口的方法,返回产品实例的一个操作
<?php
/**
* 一个抽象类
*/
abstract class Builder
{
//需求
public abstract function Buildertask();
//项目
public abstract function Builderject();
//测试
public abstract function Buildertest();
//上线
public abstract function Builderok();
}
/**
* 定义项目产品
*/
class Car
{
//存放操作
private $list=[];
//添加操作
public function add($get){
$this->list[]=$get;
}
//展示
public function show(){
foreach ($this->list as $key => $value) {
echo $value;
}
echo '项目完成了';
}
}
/**
* 抽象实现类A
*/
class contentA extends Builder
{
private $car;
function __construct()
{
$this->car=new Car();
}
//需求
public function Buildertask(){
$this->car->add('需求one');
}
//项目
public function Builderject(){
$this->car->add('项目one');
}
//测试
public function Buildertest(){
$this->car->add('测试one');
}
//上线
public function Builderok(){
$this->car->add('上线one');
}
//返回
public function getcar(){
return $this->car;
}
}
/**
* 抽象实现类B
*/
class contentB extends Builder
{
private $car;
function __construct()
{
$this->car=new Car();
}
//需求
public function Buildertask(){
$this->car->add('需求two');
}
//项目
public function Builderject(){
$this->car->add('项目two');
}
//测试
public function Buildertest(){
$this->car->add('测试two');
}
//上线
public function Builderok(){
$this->car->add('上线two');
}
//返回
public function getcar(){
return $this->car;
}
}
/**
* 具体调用类建造者类
*/
class yuangang
{
public function insert($object)
{
$object->Buildertask();
$object->Builderject();
$object->Buildertest();
$object->Builderok();
return $object;
}
}
//先new 自己需要的项目类建造者类
// $object =new contentA();
$object =new contentB();
//实例化调用类
$yuan= new yuangang();
//获取项目对象
$data=$object->getcar();
$data->show();
//insert 返回操作对象 也可以直接链式执行
$yuan->insert($object)->getcar()->show();