<?php
/*
* 生成器模式
*
* 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.
* 为了将构建复杂对象的过程和它的部件解耦,非常类似抽象工厂模式
*
* @author doodoo<pwtitle@gmail.com>
*/
/**
* 生成器,说明如何装配
*
* @author doodoo<pwtitle@gmail.com>
*/
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<pwtitle@gmail.com>
*/
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();
?>