7
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

マンガでわかる Chain of Responsibility

A0648B40-3BAD-4B11-AC4E-70F948750216.png

ゆうしゃくるみよ、このお使いクエストはラスボス戦の直前まで続くのじゃ。なんとか of かんとか ... ファンタジー RPG みたいな名前だったもので。

問い合わせた先が自身で結果を返せないとき、次の人にバトンパスして、どんどん数珠つなぎで結果を返せるオブジェクトに当たるまでやるのが、Chain of Responsibility パターンです。

Composite パターンが多重下請け構造だとするなら、顧客企業が投げた質問を返せる人がいる会社まで、伝言ゲームが続く様子を表しているのがこのパターンって感じですね。(ちょっと〜 ファイルの探索とか HTML DOM のセレクタとか、もっと無難な例を出せませんか)

Proxy を Proxy に接続したような場合も、応答を得るときこのパターンに該当することがあります。Web サーバーの物理構成がまさにそうですし、PHP の PSR15 ミドルウェア (ミュータブルなものの加工ではなくイミュータブルなレスポンスを返す) は HTTP プロクシのチェーンをひとつのプロセスで行うモデルです。

もっとありふれた例でいえば、リンクリストの末尾を返す last は Chain of Responsibility そのものです。cons が末尾でない場合は cdr に委譲する処理を末尾再帰最適化で...

デザインパターンはオブジェクト指向言語のためのものだから関数型は関係ないよねなんて言ってたら、そんなの大間違いですね。何指向の言語だとか、そういう話ではないですよね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
7
Help us understand the problem. What are the problem?