Observatör är ett designmönster där ett objekt håller i en lista över beroenden, som kallas "observatörer", och meddelar dem automatiskt när någonting ändras, vanligtvis genom att anropa en av deras metoder. Den används huvudsakligen för att implementera distribuerade händelsehanterande system. Designmönstret är även en viktig del i model–view–controller.[1] Designmönstret är implementerat i ett flertal programbibliotek och system, inklusive nästan alla GUI-toolkit.
Observatör kan orsaka minnesläckage eftersom det kräver både explicit registrering och avregistrering, då objektet håller i starka referenser till observatörerna som håller dem igång. Detta kan förhindras genom att objektet håller i svaga referenser till observatörerna.
Exempel
Nedan finns ett exempel i Java som läser tangentbordsinmatningar och behandlar varje inmatning som en händelse. Exemplet är byggt med biblioteksklasserna java.util.Observer och java.util.Observable. När en textsträng hämtas från System.in anropas metoden notifyObservers för att meddela alla observatörer om händelsen genom att anropa deras uppdateringsmetoder, vilket i detta fall är en lambdafunktion.