復讐:Chain of Responsibility

今回はChain of Responsibilityパターンの復讐です。



Chain of Responsibility
このパターンは何らかの問題に対して複数の解決ロジックを連鎖的に適用することによって問題の解決を図るパターンです。
解決ロジックの追加のしやすさなどがキモとなっています。
このパターンの中では複数の解決ロジックが連鎖的に適用され、Aで解決できなければBを、BがダメならCをというように次々と違う解決策が適用されていきます。


このように問題をたらい回しにする連鎖は、解決ロジックとは別の場所に書かれます。
連鎖の定義を解決ロジックと分離することによって、解決ロジックを表現するクラスの繋がりが薄くなり、修正のしやすいプログラムとなります。
これは新しい解決ロジックの追加も容易にしています。



パターン同士のつながり
このパターンの中には問題解決が可能なクラスを探す際に再帰的な処理を用いているのですが、ここで用いられているパターンがCompositeパターンです。
デザインパターンにはかなりの数がありますが、適用範囲の広い物、適用範囲の狭い物、色々あるようです。
例えばIteratorパターンは実に様々な場面で使われていますし、今回のChain of Resiponsibilityパターンでは再帰的な構造を表すCompositeパターンが使われました。
基礎的、初歩的なパターンが存在し、その上に基礎的なパターンを使用した高度なパターンが存在するということでしょう。
基礎の重要さを再認識できます。