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).
design-patterns
language-agnostic
listener
observer-pattern
JohnnyLambada
źródło
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło