Wzorzec projektowy obserwatora a „słuchacze”

136

Wydaje mi się, że wzorzec projektowy Observer opisany w GOF jest tak naprawdę tym samym, co Listeners znalezione w różnych zestawach narzędzi. Czy istnieje różnica między pojęciami, czy też słuchacze i obserwatorzy są naprawdę tym samym.

(Nie szukam żadnej konkretnej implementacji języka komputerowego, chcę tylko zrozumieć różnicę (jeśli w ogóle) z punktu widzenia projektowania. Tak, wiem, że jest kilka odpowiedzi na podobne pytania dotyczące SOF, ale są one zakorzenione w konkretnych pytaniach dotyczących konkretnych języków - szukam odpowiedzi projektowej, a nie językowej).

JohnnyLambada
źródło
19
W pierwszym przypadku jeden kod obserwuje drugi kod pod kątem ruchu, podczas gdy w drugim jeden kod nasłuchuje innego kodu pod kątem jakichkolwiek szumów.
nate c
2
Co oznacza GOF?
dekaru
5
@dekaru Gang of Four: en.wikipedia.org/wiki/Design_Patterns
bitsoflogic

Odpowiedzi:

60

To, czy termin „detektor” odnosi się do wzorca Observer, czy nie, będzie zależeć od kontekstu. Na przykład „Detektory zdarzeń” języka Java Swing są częścią implementacji wzorca Observer, podczas gdy „Nasłuchiwacze śledzenia” .Net nie są.

Często zdarza się, że autorzy frameworków przypisują różne nazwy komponentom uczestniczącym w implementacji danego wzorca, ale oficjalne nazwy wzorców są zwykle używane podczas omawiania samych wzorców.

Jeśli chodzi o projekt, często na implementację danego wzorca wpływa używany język i platforma. W związku z tym konkretna implementacja wzorca Observer w danej strukturze (w której może się zdarzyć, że do opisania roli ConcreteObserver używany jest termin „słuchacz”) może nieznacznie różnić się od opisanej w książce Design Patterns.

Derek Greer
źródło
26

Opis Observer in Design Patterns autorstwa Gamma et. glin. (GoF).

W swoim opisie Observera, jeden z ConcreteObservers może zasygnalizować zmianę jego Temat. Temat, który przechowuje listę wszystkich ConcreteObservers, następnie powiadamia o swojej liście. Następnie wszystkie ConcreteObservers, w tym główny napęd, reagują w razie potrzeby.

Wydaje się, że wszystkie popularne implementacje Słuchaczy reagują na zdarzenia z zewnątrz.

Więc powiedziałbym, że Listener to mniej uogólniony przypadek Obserwatora.

Richard Wеrеzaк
źródło
4

Słuchacz może być implementacją wzorca obserwatora. Słuchacz zasadniczo czeka na wystąpienie zdarzenia na danym obiekcie, co robi obserwator.

Wiem, że nie szukasz odpowiedzi w konkretnym języku, ale trudno jest mówić o tym w sposób abstrakcyjny. Więc gdybym miał to zbadać w .NET, byłbym skłonny otworzyć zestaw zawierający odbiornik w .NET Reflector, który pozwoli mi zdemontować zespół i sprawdzić jego logikę względem wzorca projektowego.

Mikrofon
źródło