Observer (pozorovateľ)
Návrhový vzor Observer umožňuje objektu spravovať rad pozorovateľov, ktorí reagujú na zmenu jeho stavu volaním svojich metód.
Motivácia
Vysporiadanie sa so závislosťami je jeden z hlavných problémov pri návrhu softvéru. Veľmi často nám na konkrétnom objekte závisí niekoľko ďalších. Napr. inštancie používateľa v desktopovej aplikácii zmení svoju adresu, na túto zmenu však musí byť upozornené všetky otvorené formuláre a ďalšie dialógy, v ktorých meno figuruje. Ďalej je potrebné upozorniť externý register, ktorý je využívaný pri zasielanie katalógov poštou.
Z hľadiska návrhu nie je vhodné touto logikou zaťažovať objekt používateľa. Ten by nemal vedieť o objektoch, ktoré na ňom závisí, pretože by ho to zbytočne zesložiťovalo a znepřehledňovalo. Vďaka Observeru môže byť užívateľ od týchto objektov odtienený.
Vzor
Pozorovaný objekt je vo vzore označený ako Predmet. Ten je abstraktné
triedou a obsahuje metódy pre pridanie, odstránenie a zavolanie
pozorovateľov. Pozorovateľ je objekt závislý na predmete. Ten dedí z
abstraktné triedy Observer
(pozorovateľ) a tak implementuje
rozhranie, ktoré ho umožňuje na zmenu predmetu upozorniť. Predmet si na
abstraktné úrovni spravuje kolekciu svojich pozorovateľov.
![Návrhový vzor Observer - GOF - Vzory správania](images/5/patterns/observer.png)
Pri zmene stavu na sebe predmet zavolá metódu upozornit()
ao
viac sa nestará. Metóda je implementovaná v abstraktnej triede
Predmet
a proiteruje kolekciu jeho pozorovateľov. Na nich je
zavolaná metóda obnovit()
, čím je ich stav opäť
konzistentné.
Záverom
Vzor sa využíva v systémoch, ktoré sú založené na spracovanie udalostí.