<?php /* * 生成器模式 * * 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. * 为了将构建复杂对象的过程和它的部件解耦,非常类似抽象工厂模式 * * @author doodoo<[email protected]> */ /** * 生成器,说明如何装配 * * @author doodoo<[email protected]> */ interface Builder{ /* * 创建A部分,比如一部汽车的方向盘 */ public function buildPartA(); /** * 创建B部分,比如汽车的车轮 */ public function buildPartB(); /** * 创建C部分,比如汽车的发动机 */ public function buildPartC(); /** * 得到产品,即汽车 */ public function getProduct(); } /** * 具体如何装配?具体对象 */ class ConcreteBuilder implements Builder { public function __construct(){ // do something } public function buildPartA(){ //do something... } public function buildPartB(){ //do something... } public function buildPartC(){ //do something... } public function getProduct(){ // 返回成品结果 } } /** * 装配工 * * 负责将装配完成,装配工知道该如何装配 * * @author doodoo<[email protected]> */ class Director{ private $builder = null; public function __construct(Builder $builder){ $this->builder = $builder; } /** * 进行装配 */ public function construct(){ $this->builder->buildPartA(); $this->builder->buildPartB(); $this->builder->buildPartC(); } }
/** * 复杂对象 */ interface Product{ } // test $builder = new ConcreteBuilder(); $director = new Director($builder); // 对象被装配起来了。 $director->construct(); $product = $builder->getProduct(); ?> 
|