二. PHP的23種設(shè)計模式之一 - 建造者模式

建造者模式(Builder Pattern)是一種創(chuàng)建型設(shè)計模式,可以理解是將多個簡單的對象一點點組合成一個復(fù)雜對象或是將一個復(fù)雜的對象的創(chuàng)建過程分離出來,使這個創(chuàng)建過程可以獨立出來,讓創(chuàng)建復(fù)雜對象更加的靈活。

在建造者模式中,通常會有一個抽象的建造過程的建造者類和具體的建造者類,抽象建造者類定義了具體的建造接口,建造者類繼承這個接口并實現(xiàn)它。另外還有指揮者類(Director),用于控制建造者類,協(xié)調(diào)對象的控制過程。

建造者模式的優(yōu)點
  1. 隱藏對象的創(chuàng)建過程,讓客戶端不需要關(guān)心具體的創(chuàng)建過程。
  2. 對象的構(gòu)造過程可以復(fù)用,可以在不同的復(fù)雜對象中重復(fù)復(fù)用。
  3. 可以靈活的擴展對象的構(gòu)造過程,增加新的創(chuàng)建步驟或者更改創(chuàng)建步驟的順序。

下面我寫了一個簡單的建造者模式demo,我們需要創(chuàng)建一個復(fù)雜對象(電腦),其中有一個抽象的電腦創(chuàng)建類(AbstractComputerBuilder),和兩個具體的電腦建造者類實現(xiàn)抽象的電腦創(chuàng)建類(LaptopBuilder和DesktopBuilder),在指揮者類(Director)中,我們控制具體的建造者類,調(diào)用創(chuàng)建過程實現(xiàn)復(fù)雜的電腦類。

<?

//抽象的電腦建造者類
abstract class AbstractComputerBuilder
{
    protected $computer;

    public function getComputer() {
        return $this->computer;
    }

    public function createComputer() {
        $this->computer = new Computer();
    }

    abstract public function addCpu();

    abstract public function addRam();

    abstract public function addVideoCard();
}

//臺式電腦電腦建造者類
class DesktopBuilder extends AbstractComputerBuilder
{
    public function addCpu()
    {
        $this->computer->setCpu("I7");
    }

    public function addRam()
    {
        $this->computer->setRam("32G");
    }

    public function addVideoCard()
    {
        $this->computer->setVideoCard("4080ti");
    }
}

//筆記本電腦電腦建造者類
class LaptopBuilder extends AbstractComputerBuilder
{
    public function addCpu()
    {
        $this->computer->setCpu("I5");
    }

    public function addRam()
    {
        $this->computer->setRam("16G");
    }

    public function addVideoCard()
    {
        $this->computer->setVideoCard("3080");
    }
}

//電腦類
class Computer
{
    private $cpu;
    private $ram;
    private $videoCard;

    public function setCpu($cpu)
    {
        $this->cpu = $cpu;
    }

    public function setRam($ram)
    {
        $this->ram = $ram;
    }

    public function setVideoCard($videoCard)
    {
        $this->videoCard = $videoCard;
    }

    public function getComputerParams()
    {
        return "CPU: {$this->cpu}, RAM: {$this->ram}, Hard Drive: {$this->videoCard}";
    }
}

class Director {
    private $builder;

    public function setBuilder($builder){
        $this->builder = $builder;
    }

    public function getComputer(){
        return $this->builder->getComputer();
    }

    public function buildComputer() {
        $this->builder->createComputer();
        $this->builder->addCpu();
        $this->builder->addRam();
        $this->builder->addVideoCard();
    }
}

$desktopBuilder = new DesktopBuilder();
$laptopBuilder = new LaptopBuilder();
$director = new Director();

//構(gòu)造臺式電腦
$director->setBuilder($desktopBuilder);
$director->buildComputer();
$desktopComputer = $director->getComputer();
echo $desktopComputer->getComputerParams().'<br>';

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

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

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