29
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ちょうぜつAdvent Calendar 2019

Day 13

マンガでわかる Chain of Responsibility

Last updated at Posted at 2019-12-13

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 に委譲する処理を末尾再帰最適化で...

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

29
9
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?