<?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 输出
PHP 构造者模式
猜你喜欢
转载自my.oschina.net/u/3529405/blog/1823551
今日推荐
周排行