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