ここでは、オブジェクト指向の言語の比較を目的として、デザインパターンの Chain of Responsibility の比較をしてみるぜ。Chain of Responsibility ってのは、デザインパターンの 1 つで、リクエストをオブジェクトのチェインに投げて、処理できるものがそいつを処理するってものだ。(参考:ギコ猫と Chain of Responsibility)
次のようなチェインを考えよう。
ということだ。
次の言語を用いて実装してみた。それぞれ特色があって、見比べるととても面白い。ポイントは、リクエストの送信、チェインの探索を何で実装しているか、ということと、リクエストとハンドラを増やすときにどのくらいの手間がかかるか、ということだ。
そして、Chain of Responsibility が、実際のフレームワークでどういう風に使われているか、ってことも見てみよう。ここでは NSResponder を取り上げてみる。これは Objective-C を使っているけど、言語の特性をうまく利用しているのが分かると思うよ。