设计模式 - 管道模式

460 阅读1分钟

所谓管道(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();

最终输出

image.png