目的:生成器的目的是将复杂对象的创建过程(流程)进行抽象,生成器表现为接口的形式。
如果对象有复杂的继承树,理论上创建对象的生成器也同样具有复杂的继承树。
传进来一个生成器, 我调用这个生成器来生成我所需要的汽车,这就是生成器模式的核心.这个生成器Builder是个接口,把复杂对象的创建过程进行抽象
class Director\n{\n public function build(Builder $builder): Vehicle\n {\n $builder->createVehicle();\n $builder->addDoors();\n $builder->addEngine();\n $builder->addWheel();\n return $builder->getVehicle();\n }\n}
这就是生成器这个接口
interface Builder\n{\n public function createVehicle();\n public function addWheel();\n public function addEngine();\n public function addDoors();\n public function getVehicle(): Vehicle;\n}
有两个具体的实现类 CarBuilder TruckBuilder 分别生成汽车和卡车
class TruckBuilder implements Builder\n{\n private Truck $truck;\n public function addDoors(){\n }\n public function addEngine(){\n }\n public function addWheel(){\n }\n\n public function createVehicle(){\n }\n\n public function getVehicle(): Vehicle{\n }\n}
使用的时候,先创建builder,把builder通过参数传递进去
$truckBuilder = new TruckBuilder();\n$newVehicle = (new Director())->build($truckBuilder);