1、抽象建造者接口,将产品的各部件组装抽象成一系列操作。
2、具体建造者,负责实现产品部件的组装细节,并将结果返回。
3、指挥者,它是建造者的使用者,负责将各个建造环节串起来。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
4、产品角色,建造者加工的对象。
/** *建造者抽象类 */ abstract class Builder{ public abstract function buildPartA(); public abstract function buildPartB(); public abstract function getResult(); } /** *具体建造者类 */ class ConcreteBuilder extends Builder{ private $product; public function __construct(){ $this->product = new Product('Bird Gun'); } public function buildPartA(){ $this->product->add('Part A'); } public function buildPartB(){ $this->product->add('Part B'); } public function getResult(){ return $this->product; } } /** *指挥者,与建造者是拥有关系(Director has a Builder) */ class Director{ public function __construct(Builder $builder){ $builder->buildPartA(); $builder->buildPartB(); } } /** *产品类 */ class Product{ private $name; private $parts = array(); public function __construct($name){ $this->name = $name; } public function add($part){ array_push($this->parts, $part); } public function show(){ echo 'Product Name:'.$this->name.', With parts:'.implode(',', $this->parts).'<br>'; } } $builder = new ConcreteBuilder(); new Director($builder); $product = $builder->getResult(); $product->show();