97

Wydaje mi się, że wzorzec wzorcowy Observer opisany w GOF to naprawdę to samo, co w różnych zestawach narzędzi. Czy istnieje różnica między koncepcjami, czy też Słuchacze i Obserwatorzy naprawdę to samo.Wzorzec wyglądu obserwatora a "słuchaczy"

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

+14

W pierwszym z nich koduje drugi kod ruchu, podczas gdy w drugim koduje się drugi kod dla dowolnego szumu. –

+2

Co oznacza skrót GOF? – dekaru

+5

@dekaru Gang Czterech: https://en.wikipedia.org/wiki/Design_Patterns – bitsoflogic

Odpowiedz

44

To, czy termin "słuchacz" odnosi się do wzorca Obserwatora, zależy od kontekstu. Na przykład "Event Listeners" Java Swinga są częścią implementacji wzorca Obserwatora, podczas gdy .Net "Trace Listeners" nie są.

Nierzadko autorzy ramowi przypisują różne nazwy do elementów biorących udział we wdrażaniu danego wzoru, ale oficjalne nazwy wzorów są zwykle używane podczas omawiania samych wzorców.

Jeśli chodzi o projektowanie, na realizację danego wzoru często wpływa język i platforma, z których korzysta. W związku z tym szczególna implementacja wzorca Obserwatora w ramach danej struktury (która może się zdarzyć, że użyje terminu "słuchacz" w celu opisania roli ConcreteObserver) może nieznacznie różnić się od opisanej w książce Wzorce projektowe.

3

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

Nie szukamy odpowiedzi językowej, ale trudno mówić o tych rzeczach w sposób abstrakcyjny. Jeśli miałbym to zbadać w .NET, byłbym skłonny otworzyć zestaw zawierający słuchacza w .NET Reflectorze, który pozwoli mi rozebrać zestaw i sprawdzić jego logikę na podstawie wzorca projektowego.

18

Istnieje dwukierunkowa natura opisu Observera w wzorach projektowych według Gamma et. glin. (GoF).

W swoim opisie Observer, jeden z ConcreteObservers może zasygnalizować zmianę Tematu. Temat, który zawiera listę wszystkich ConcreteObservers, następnie powiadamia swoją listę. Wszystkie ConcreteObservers, w tym Prime Mover, reagują odpowiednio.

Zwykłe implementacje Słuchaczy zdają się reagować na wydarzenia z zewnątrz.

Powiedziałbym więc, że słuchacz jest mniej uogólnionym przypadkiem Observera.

Powiązane problemy