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