Omogućava mehanizam pomoću kog se između zavisnih objekata obezbeđuje automatska notifikacija promene stanja jednog objekta i ažuriranje svih ostalih (gde je moguće da nije poznat broj tih ostalih objekata koje valja promeniti ili da objekat koji obaveštava druge objekte o promeni ne poseduje bilo kakvu pretpostavku o tome koji su to objekti).
U okruženjima koja razdvajaju sadržaj
svog modela od samog prikaza. Naime, sam prikaz modela može biti raznovrstan, te
je nužno održavati sve prikaze ažurnim kada se podaci promene kroz
bilo koji prikaz.
Npr. isti podaci u programu za tabelarna
izračunavanja mogu da se prikažu tabelarno ili grafički na više
načina (histogram, radni list,pie chart, linijski dijagram,...), pa je jasno da moraju prikazi
biti ažurni pri promeni ma kog podatka kroz ma koji prikaz.
Definisati objekat klase Kontrolor koji sadrži spisak svih aktivnih delova, kako bi mogao da im prosledi notifikaciju o promeni.
Da bi ovaj kontrolor video sve delove na
isti način, oni su svi realizovani klasama izvedenim iz neke
apstraktne klase SpecifikacijaElementa.
Spisak delova unutar kontrolora mora biti ažuran, pa zato svaki
deo se pri aktiviranju/otvaranju prijavljuje kontroloru, a pri zatvaranju
odjavljuje se.
Pri promeni sadržaja nekog od delova, obaveštava se kontrolor o promeni pozivom operacije notify() .
U ovoj operaciji kontrolor obilazi sve prijavljene delove i poziva njihovu apstraktnu operaciju update().Svaki od delova izvršava ovu operaciju, na sebi svojstven način.
Ako je potreban samo jedan kontrolor (a
najčeše jeste), onda klasa Kontrolor je, u stvari, Singleton.
U opštem slučaju ,Observer pattern se primenjuje kada postoji više posmatrača koji su zainteresovani za promenu sadržaja nekog subjekta, pri čemu je proizvoljan i broj posmatrača i njihova raznovrsnost.
1. kaskadnog ažuriranja observer-a (npr. neka od operacija nad subjektom može da izazove ažuriranja tog tipa i nad objektima koji zavise od observer-a) i od
2. neusklađenog ažuriranja (npr. ako kriterijumi zavisnosti među objektima su nedovoljno dobro definisani )
Postoji bliskost Observer pattern-a sa Model-View-Controller arhitekturom poznatom još od Smalltalk, jer u opštem slučaju u Observer pattern-u učestvuju sledeće tri uloge:
Interfejs java.util.Observer određuje metod za ažuriranje objekta klase
java.util.Observable .
U Observer DP-u klasa Observable predstavlja objekat čija
promena stanja je od interesa za objekat Observer.
AWT Listeners su Observer varijanta. (java.awt.Component , java.awt.event.XXListener ,...)
Može se uočiti da neke aukcije upravo
demonstriraju ovaj pattern. Svaki takmičar u licitaciji poseduje
brojne kartice kao učesnik.
Čim startuje aukcija "observira"
se podizanje kartice kao potvrda prihvatanja iznosa. Prihvatanje
iznosa menja cenu o čemu su obavešteni (notificirani)
ostali učesnici aukcije.
U odnosu izdavaštvo-pretplata Subject je izdavač obaveštenja na koja su Observeri pretplaćeni. Subject šalje obaveštenja do svih Observer-a. Ne postoje uslovi oko broja Observer-a koji se pretplaćuju.
← Iterator DP | Uvod | Factory method → |