設(shè)計(jì)模式(八):建造者模式

轉(zhuǎn)載請注明作者和出處http://www.itdecent.cn/p/483cd7c082dc

運(yùn)行平臺: Windows

php版本: php7.0

作者簡介: 一個(gè)本該成為游戲職業(yè)選手卻被編程耽誤的程序員


建造者模式:將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。它允許用戶指通過指定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,用戶不需要知道內(nèi)部的具體構(gòu)建細(xì)節(jié)。

主要角色:

抽象建造者:Builder
具體建造者:ConcreteBuilder
指揮者:Director
產(chǎn)品角色:Product

<?php
//產(chǎn)品抽象模型
class Person{
    public $age;
    public $sex;
}

//抽象類建造者
abstract class Builder{
    public $person;
    public abstract function setAge();
    public abstract function setSex();
    public function __construct(Person $person){
        $this->person = $person;
    }
    public function getPerson(){
        return $this->person;
    }
}

//男人
class ManBuilder extends Builder{
    public function setAge()
    {
        $this->person->age = 20;
    }

    public function setSex()
    {
        $this->person->sex = '男';
    }
}


//女人
class WoMenBuilder extends Builder{
    public function setAge()
    {
        $this->person->age = 20;
    }

    public function setSex()
    {
        $this->person->sex = '女';
    }
}

//建造指揮者
class Director{
    private $builder;
    public function __construct(Builder $builder)
    {
        $this->builder = $builder;
    }

    public function built(){
        $this->builder->setAge();
        $this->builder->setSex();
    }
}

$manBuilder = new ManBuilder(new Person());//構(gòu)建男人建造者
$director = new Director($manBuilder);//構(gòu)建指揮者
$director->built();//建造指揮
$man = $manBuilder->getPerson();//獲取男人
var_dump($man);

輸出結(jié)果:

object(Person)#2 (2) {
["age"]=>
int(20)
["sex"]=>
string(3) "男"
}


建造者和抽象工廠很像,兩者沒什么大的區(qū)別,建造者比抽象多了一個(gè)導(dǎo)演,可以用來創(chuàng)建更復(fù)雜的產(chǎn)品。d d

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容