Ontwerppatroon van waarnemer versus “luisteraars”

Het lijkt mij dat het Observer-ontwerppatroon zoals beschreven in GOF echt hetzelfde is als luisteraars die in verschillende toolkits worden gevonden. Is er een verschil tussen de concepten, of zijn luisteraars en waarnemers echt hetzelfde.

(Ik ben niet op zoek naar een specifieke implementatie van computertaal, ik wil alleen het verschil (indien aanwezig) begrijpen vanuit een ontwerpoogpunt. Ja, ik weet dat er verschillende antwoorden zijn op vergelijkbare vragen over SOF, maar ze zijn geworteld in specifieke vragen over specifieke talen — ik ben op zoek naar een ontwerpantwoord, geen taalantwoord.)


Antwoord 1, autoriteit 100%

Of de term ‘luisteraar’ verwijst naar het waarnemerpatroon of niet, hangt af van de context. De “Event Listeners” van Java Swing maken bijvoorbeeld deel uit van een Observer-patroonimplementatie, terwijl de “Trace Listeners” van .Net dat niet zijn.

Het is niet ongebruikelijk dat framework-auteurs verschillende namen toewijzen aan componenten die deelnemen aan een bepaalde patroonimplementatie, maar de officiële patroonnamen worden over het algemeen gebruikt bij het bespreken van de patronen zelf.

Wat het ontwerp betreft, wordt de implementatie van een bepaald patroon vaak beïnvloed door de taal en het platform dat wordt gebruikt. Als zodanig kan een bepaalde implementatie van het Observer-patroon binnen een bepaald raamwerk (waarbij toevallig de term “luisteraar” wordt gebruikt om de rol van de ConcreteObserver te beschrijven) enigszins verschillen van de implementatie die wordt beschreven in het Design Patterns-boek.


Antwoord 2, autoriteit 48%

Er is een tweerichtingskarakter in de beschrijving van Observer in Design Patterns door Gamma et. al. (GoF).

In hun beschrijving van Observer kan een van de ConcreteObservers een verandering in zijn onderwerp aangeven. Het onderwerp, dat een lijst van alle ConcreteObservers bevat, geeft vervolgens de lijst door. Alle ConcreteObservers, inclusief de krachtpatser, reageren vervolgens waar nodig.

De gebruikelijke implementaties van Luisteraars lijken allemaal te reageren op gebeurtenissen van buitenaf.

Dus ik zou zeggen dat de luisteraar een minder algemeen geval van een waarnemer is.


Antwoord 3, autoriteit 5%

Een luisteraar kan heel goed een implementatie zijn van het waarnemerspatroon. Een luisteraar wacht in wezen op een gebeurtenis op een bepaald object, wat een waarnemer doet.

Ik weet dat je niet op zoek bent naar een taalspecifiek antwoord, maar het is nogal moeilijk om hier abstract over te praten. Dus als ik dit in .NET zou onderzoeken, zou ik geneigd zijn een assembly met een listener in .NET Reflector te openen, waardoor ik de assembly kan demonteren en de logica ervan kan toetsen aan een ontwerppatroon.

Other episodes