2013-05-17 5 views
5

私は割り当てのためのオブザーバーパターンについて調査しています。これまでのところ、私は「The Gang of Four」と呼ばれる人々のグループによって書かれた本に最初に登場したという結論に達しました。オブザーバーデザインパターンの話は何ですか?

しかし、最初の実装がSmallTalk MVCベースのフレームワークであることも読んでいます。

オブザーバーパターンの原点はありますか?誰が最初にそれを設計しましたか?どのGoFメンバーがそれをしましたか?創業以来、何か変わったことはありますか?

また、パターンの実装には、Subjectクラスの一般化である "ConcreteSubject"と呼ばれるものも含まれます。これはパターンのバリエーションか、むしろ元のモデルからの進化ですか?

答えて

8

Gang of FourがDesign Patternsに主に貢献しているのは、デザインインテントのコミュニケーションを助けるために、いくつかのよく使われるパターンに実際に名前を付けることです。誰も読むことのない大きなブロックよりも書き込むほうがずっと簡単です。

人々が専門用語を共有すると、開発者はより効果的にコミュニケーションをとることができます。

オブザーバーパターンは、OOプログラミングの前にはかなり長い時間です。多くの場合、「コールバック」という用語を使用して呼び出されました。さまざまな言語の関数ポインタや、関数/プロシージャ/サブルーチンの呼び出しに使用されていました。これは、モジュール間の抽象的なコミュニケーションの最も初期の形式の1つを表しています。私はアセンブラ言語でも同様のアプローチを取っています。コールバックアドレスを格納し、それを使って間接的に「何か起こった」ことを通知します。

覚えておいて欲しいのは、Design Patternsの本のGang of Fourが示す実装は、絶対的なものではなく、アプローチを示すためのものです。抽象クラス、インターフェイス、またはC#デリゲートの場合と同じように、Observerパターンを関数ポインタで簡単に実装できます。

(私はJohns HopkinsのDesign Patternsコースを教えてくれます。)

+0

私はまだまだ理解しています。どうもありがとうございます!最後の質問は1つだけです。 Subjectコンポーネントを "ConcreteSubject"に一般化する理由をよく理解できませんでした。それはどういうことですか?再度、感謝します。 –

+1

"subject"は、聴きたいものを表す抽象です。これは一般的にインタフェースまたは抽象クラスですが、非OO言語の関数ポインタパラメータ定義でもあります。 ConcreteSubjectは、サブジェクト定義を実装するものを表します。サブジェクト(またはポインタを渡す実際の関数)を実装/拡張するクラス。 (そして、親切な言葉に感謝します!私が助けることができてうれしいです) –

1

The Gang of Fourは発明パターンではありませんでしたが、開発者が直面する共通の問題を解決するためにソフトウェア分野を観察し、調査しました。

最初に誰がそれを発明したのかについては、あなたの推測は私が推測するほど良いものです。誰がそれを発明したのか分かっていれば、私は興味があります。私の意見では、誰が火を発明したかを尋ねるようなものです...

ConcreteSubjectはSubjectインターフェイスの実装を指します。また、パターンを容易にするためのインターフェースを持つだけで変わったことではありません。 (またはスーパークラスだが、インターフェイスははるかに優れている)。

関連する問題