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