创造型模式,也可以叫做生成器模式,用来创建对象,<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();