生成器模式,又称构造者模式,用于分离复杂对象的构建和表示,通过同样的构建过程创建不同的表示。实现基本部件不变,组合方式改变。
举个例子,杯子由杯身和杯盖组成,有的杯盖是玻璃的,有的是陶瓷的。首先构造cover父类,及两个继承类。创建cupbody类。
class cover{
protected $type;
public function toString(){
return $this->type.' cup.<br>';
}
}
class glassCover extends cover{
function __construct(){
$this->type='glass';
}
}
class chinaCover extends cover{
function __construct(){
$this->type='china';
}
}
class cupbody{
public function toString(){
return 'cupbody<br>';
}
}
创建cup类,和相应的builder类。
class cup{
private $cover;
private $body;
public function setCover($cover){
$this->cover = $cover;
}
public function setBody($body){
$this->body = $body;
}
public function toString(){
echo 'cover: '.$this->cover->toString();
echo 'body: '.$this->body->toString();
}
}
class cupBuilder{
public function cupWithGlassCover(){
$cup = new cup();
$cup->setCover(new glassCover());
$cup->setBody(new cupbody());
return $cup;
}
public function cupWithChinaCover(){
$cup = new cup();
$cup->setCover(new chinaCover());
$cup->setBody(new cupbody());
return $cup;
}
}
//测试
$cupBuilder = new cupBuilder();
$cup = $cupBuilder->cupWithChinaCover();
$cup->toString();
通常情况下,由具体生成器生成的产品,表示差异较大,无需公共父类。