创建模式-构造者/生成器模式(Builder)

生成器模式,又称构造者模式,用于分离复杂对象的构建和表示,通过同样的构建过程创建不同的表示。实现基本部件不变,组合方式改变。

举个例子,杯子由杯身和杯盖组成,有的杯盖是玻璃的,有的是陶瓷的。首先构造cover父类,及两个继承类。创建cupbody类。

class cover{
    protected $type;
    public function toString(){
        return $this->type.' cup.
'
; } } 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
'
; } }

创建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();

通常情况下,由具体生成器生成的产品,表示差异较大,无需公共父类。

你可能感兴趣的:(大明湖畔的设计模式们)