PHP 構造者模式

<?php
/**
 * 建造者模式
 * 場景:構建一個複雜過程的類時候
 * 抽象一個類的構建過程,
 * 在讓一個具體的構建類,實現過程.
 * 讓具體的類去構建一個複雜的具體類
 */

/**
 * Class Computed
 * 構建複雜類
 */
class Computed {
    protected $cpu;
    protected $gpu;
    protected $Ssd;
    public function setCpu ($str)
    {
        return $this->cpu = $str;
    }
    public function setGpu ($str)
    {
        return $this->gpu = $str;
    }
    public function setSsd ($str)
    {
        return $this->Ssd = $str;
    }
    public function show () {
       echo $this->cpu.$this->gpu.$this->Ssd.PHP_EOL;
    }
}

/**
 * Class Build
 * 抽象構造複雜類接口
 */
abstract class Build {
    protected $computed;
    abstract public function buildCpu();
    abstract public function buildGpu();
    abstract public function buildSsd();
    // ......
}

/**
 * Class ComputedBuild
 * 構建複雜類具體實現 集成build 接口
 */
class ComputedBuild extends Build {
    public function __construct()
    {
        $this->computed = new Computed() ;
    }
    public function buildCpu()
    {
        $this->computed->setCpu('i7 4900K');
        // TODO: Implement Cpu() method.
    }

    public function buildGpu()
    {
        $this->computed->setGpu('GTX 780ti');
        // TODO: Implement Gpu() method.
    }

    public function buildSsd()
    {
        $this->computed->setSsd('SDD-500G');
        // TODO: Implement Sdd() method.
    }
    public function selfObj () {
        return $this->computed;
    }

}

/**
 * Class Director
 * 操做複雜構造實現類
 */
class Director {
    public $dBuild;
    // 傳入一個 繼承了 build 的類
    public function setObject (Build $build)
    {
        $this->dBuild = $build;
    }
    // 操做構造類建立複雜類實例並返回
    public function startBuild ()
    {
        $this->dBuild->buildCpu();
        $this->dBuild->buildGpu();
        $this->dBuild->buildSsd();
        return $this->dBuild->selfObj();
    }
}

$computed = new ComputedBuild(); // 具體構造實例類
$director = new Director(); // 操做具體構造實例類

$director->setObject($computed); // 傳入 具體構造實例類
$newComputed = $director->startBuild(); // 返回複雜類
$newComputed->show(); // i7 4900K GTX 780tiSDD-500G 輸出
相關文章
相關標籤/搜索