所谓管道(Pipeline)设计模式就是将会数据传递到一个任务序列中,管道扮演者流水线的角色,数据在这里被处理然后传递到下一个步骤
interface PipelineInterface {
public function __construct($payload);
public function pipe(StageBuildInterface $stage);
public function process();
}
class Pipeline implements PipelineInterface {
protected $payload;
protected $stages = [];
public function __construct($payload) {
$this->payload = $payload;
}
public function pipe(StageBuildInterface $stage) {
$this->stages[] = $stage;
return $this;
}
public function process() {
$payload = $this->payload;
foreach ($this->stages as $stage) {
$payload = call_user_func([$stage, 'process'], $payload);
}
return $payload;
}
}
interface StageBuildInterface {
public function process($payload);
}
class StageBuild implements StageBuildInterface {
public function process($payload) {
return $payload;
}
}
class StageBuild1 extends StageBuild {
public function process($payload) {
return $payload .'真实';
}
}
class StageBuild2 extends StageBuild {
public function process($payload) {
return $payload. '的';
}
}
class StageBuild3 extends StageBuild {
public function process($payload) {
return $payload. '名字';
}
}
$payload = '我';
echo (new Pipeline($payload))
->pipe(new StageBuild1())
->pipe(new StageBuild2())
->pipe(new StageBuild3())
->process();
最终输出