Chain of Responsibility の実装の比較


HOME > TIPS > オブジェクト指向の言語比較論 > デザインパターンの実装の比較 > Chain of Responsibility の実装の比較

Chain of Responsibility の実装の比較


ここでは、オブジェクト指向の言語の比較を目的として、デザインパターンの Chain of Responsibility の比較をしてみるぜ。Chain of Responsibility ってのは、デザインパターンの 1 つで、リクエストをオブジェクトのチェインに投げて、処理できるものがそいつを処理するってものだ。(参考:ギコ猫と Chain of Responsibility

次のようなチェインを考えよう。

・Button -> Dialog -> Application というオブジェクトのチェイン。

・ハンドラとして、help、print、preview がある。

・どのオブジェクトも、すべてのハンドラを実装する可能性がある。

・チェインに対してリクエスト(help リクエスト、print リクエスト、preview リクエスト)を投げる。

・チェインをたぐって、はじめに対応するハンドラがあるオブジェクトが、リクエストを処理する。

ということだ。

次の言語を用いて実装してみた。それぞれ特色があって、見比べるととても面白い。ポイントは、リクエストの送信、チェインの探索を何で実装しているか、ということと、リクエストとハンドラを増やすときにどのくらいの手間がかかるか、ということだ。

C++ による実装

Java による実装

Objective-C による実装

Smalltalk による実装

Dylan による実装

Self による実装

NewtonScript による実装

AppleScript による実装

C による実装

そして、Chain of Responsibility が、実際のフレームワークでどういう風に使われているか、ってことも見てみよう。ここでは NSResponder を取り上げてみる。これは Objective-C を使っているけど、言語の特性をうまく利用しているのが分かると思うよ。

NSResponder と responder chain の実装