<?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 輸出