概念的な例
この例は、 Chain of Responsibility デザインパターンの構造を説明するためのものです。 以下の質問に答えることを目的としています:
- どういうクラスからできているか?
- それぞれのクラスの役割は?
- パターンの要素同士はどう関係しているのか?
ここでパターンの構造を学んだ後だと、 これに続く、 現実世界の PHP でのユースケースが理解しやすくなります。
index.php: 概念的な例
Output.txt: 実行結果
現実的な例
PHP の世界で最も広く知られている Chain of Responsibility (CoR) パターンの使用は、 HTTP リクエストのミドルウェアにあります。 これらは最も人気のある PHP フレームワークによって実装されており、 PSR-15 の一部として標準化されています。
以下のように動作します。 HTTP リクエストがアプリによって処理されるためには、 ミドルウェア・オブジェクトの積み重ねを通過する必要があります。 各ミドルウェアは、 リクエストの処理を拒否するか、 次のミドルウェアに渡すことができます。 リクエストがすべてのミドルウェアを正常に通過して初めて、 アプリの主ハンドラーが最終的にそれを処理できます。
このやり方は、 パターンの元々の意図の逆のようであることにお気づきかもしれません。 その通りで、 典型的な実装では、 リクエストは現ハンドラーが取り扱えない場合にだけ次に渡されます。 それに対して、 ミドルウェアは、 アプリがリクエストを取り扱えると思われる場合に、 連鎖を通してリクエストを渡します。 にもかかわらず、 ミドルウェア・オブジェクトは連鎖をなしているため、 概念全体は CoR パターンとみなされます。
index.php: 現実的な例
Output.txt: 実行結果