2016-05-31 12 views
0

コールバックメッセージを受け取るために登録されたオブジェクトは、リスナー(PaintListener、PropertyListenerなど)またはオブザーバ(ScopeObserver、TileObserverなど)と呼ばれることがよくあります。リスナーとオブザーバーの間に概念的な違いはありますか?

私は両方とも、通常GoFオブザーバーパターンの実装であることも知っています。

私の質問は:クラスを命名するときに、MyListenerとMyObserverを呼び出す間に概念的な違いはありますか?

EDIT:この質問の重複として参照されている提案された質問は、実際には同じ質問に対処していますが、答えのどれも私にとってそれを明確にしていません。選ばれたものさえありません。

リスナーがObservers GoF実装であると見なすことができるかどうかを知りたくありません。私は、ある名前を選択するときに意味論的推論があるかどうかを知りたい。

冗談として投稿された元の質問に対するコメントは、回答が期待されたように聞こえます。 "前者のコードでは、もう一方のコードが動きを見ているのに対し、後者のコードでは任意のノイズのために他のコードに耳を傾ける。

+1

[Observer Design Pattern vs "Listeners"]の可能な複製(http://stackoverflow.com/questions/3358622/observer-design-pattern-vs-listeners) – jaco0646

答えて

2

が、これはビューの主観ポイントであることを忘れないでください。

英語は私の主要な言語ではありませんが、どちらの用語も、私には知覚できるものを積極的に見ているという考えを示しています。

しかし、人間にとっては少なくとも私の主な言語の影響を受けるかもしれませんが、私たちは集中しない限りすべてのことを聞きながら特定のものを観察する傾向があります。

OOPに適用すると、私の考えは、これらの用語は互換性がある可能性が高いということです。しかし、私は、特定の/既知のオブジェクトセットを見ているオブジェクトに名前を付けるために「Observer」という用語を、そしてそのターゲットの知識がないオブジェクトに「Listener」という名前を付けることを好むでしょう。

  • オブザーバーMouse時計1つ(またはそれ以上)Catをもっと技術的にこれを説明するために

    Mouseは、近隣のすべての猫を知っているcat-Observerです。

  • リスナーMouseは、イベントcat_in_sightが発生するのを監視します。 Mouseはcat-Observer's Observerであり、このイベントを発生させる可能性のあるすべての猫を認識していません。

このように、このリスナーは中間層(この場合はEventクラスかもしれません)のおかげで、より少ない責任を負います。我々はまた、猫にこの責任を与えて想像:

  • リスナーCatは近所ですべてのマウスを置いたを知っていて、それが近くに来たときにそれを知らせます。 Mouseは、猫を知らないため( - >猫が自分自身を「登録する」)、猫のリスナーです。

しかし、この場合、ネコ(観察された)はより多くの責任を負う。

私が十分明確であるかどうかはわかりませんが、助けてくれることを願っています。 :-)

関連する問題