Observer se foloseste in momentul in care un obiect (sau subiect), trebuie sa notifice alte obiecte ca starea lui s-a schimbat. Un exemplu foarte utilizat este in momentul in care utilizatorul apasa un buton intr-o aplicatie. In acel moment butonul si-a schimbat starea si notifica acest lucru. Scopul programatorului fiind sa se aboneze la buton cu clase ce contin metoda ce este apelata in momentul apasarii butonului.
Observer necesita 2 clase si 2 interfete. Avem nevoie de o interfata cu semnatura metodei ce va fi apelata. Obiectele ce vor vrea sa primeasca mesejul de la obiectul ce si-a schimbat starea, vor trebui sa implementeze interfata cu semnatura metodei. O a doua interfata ISubject, va contine semnaturile a 3 metode: adauga, sterge si notifica. Clasa ce va implementa aceasta interfata va contine o lista de obiecte ce implementeaza interfata de primire a notificarii. Aceasta lista va fi actualizata prin cele doua metode: cea de sterge si cea de adaugare.
Diagrama claselor arata astfel:
In C# ai posibilitatea de a folosi evenimente, practic nu vei mai avea nevoie de acest design pattern, dar si evenimente functioneaza pe acelasi principiu de abonare la eveniment.