<?php
interface PipelineInterface
{
public function __construct($payLoad);
public function pipe(StageInterface $stage);
public function process();
}
interface StageInterface
{
public function handle($payLoad);
}
class StageAddOne implements StageInterface
{
public function handle($payLoad)
{
return $payLoad + 1;
}
}
class StageMultiTwo implements StageInterface
{
public function handle($payLoad)
{
return $payLoad * 2;
}
}
class StageAddTwo implements StageInterface
{
public function handle($payLoad)
{
return $payLoad + 2;
}
}
class Pipeline implements PipelineInterface
{
private $pipes;
private $payLoad;
public function __construct($payLoad)
{
$this->payLoad = $payLoad;
}
public function pipe(StageInterface $stage)
{
$this->pipes[] = $stage;
return $this;
}
public function process()
{
foreach ($this->pipes as $eachPipe)
{
$this->payLoad = call_user_func([$eachPipe, 'handle'], $this->payLoad);
}
return $this->payLoad;
}
}
class Test
{
public function run()
{
$payLoad = 10;
$stageAddOne = new StageAddOne();
$stageMultiTwo = new StageMultiTwo();
$stageAddTwo = new StageAddTwo();
$pipe = new Pipeline($payLoad);
return $pipe->pipe($stageAddOne)->pipe($stageMultiTwo)->pipe($stageAddTwo)->process();
}
}
$test = new Test();
echo '<pre>';
var_dump($test->run());
06-15
1001
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
12-13
642
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)