Observer DP

Svrha

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).

Primene

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.

Dijagram prikaz

Međusobna saradnja učesnika

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.

Prednosti upotrebe Observer DP-a

Mana upotrebe Observer DP-a

Primeri korišćenja Observer DP-a

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 ,...)

Poznat i pod imenima

Dependents

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.

Publish-Subscribe

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 →