04.11.2014 Views

elektronická verzia publikácie - FIIT STU - Slovenská technická ...

elektronická verzia publikácie - FIIT STU - Slovenská technická ...

elektronická verzia publikácie - FIIT STU - Slovenská technická ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Návrhové vzory 7<br />

Použitie Unikátu so sebou prináša niekoko dôsledkov:<br />

− vzor Unikát umožuje ahký prístup k jedinenej inštancii triedy pomocou statickej<br />

metódy a statického atribútu reprezentujúceho inštanciu triedy,<br />

− správa vytvárania a sprístupovania inštancie je zapuzdrená v jednej triede, o<br />

umožuje ahšiu manipuláciu s ou a dáva možnos jej zamieania pri dodržaní stanoveného<br />

rozhrania,<br />

− vytváranie inštancie a jedinenos zabezpeuje trieda sama.<br />

Pri testovaní s použitím vzoru Unikát, napr. pomocou testov jednotiek (angl. UnitTests),<br />

treba pamäta na to, že jednotlivé metódy pri testovaní nevytvárajú vždy nový objekt, ale<br />

pri získavaní nového dostanú ten, ktorý sa použil v minulom teste. Toto treba bra na vedomie<br />

a poda toho formulova testy.<br />

1.1.5 Implementácia<br />

Základom implementácie je ukrytie konštruktora ako súkromnej metódy triedy. Taktiež<br />

treba ukry kopírovací konštruktor aj operátor priradenia. Tým sa znemožní nekontrolované<br />

vytváranie inštancií používateom.<br />

Na získanie inštancie musí používate vola statickú metódu getInstance, ktorá<br />

umožuje kontrolu nad vytváraním inštancií, pretože iba ona volá konštruktor triedy. Táto<br />

metóda najskôr skontroluje, i už bola vytvorená inštancia, ktorá je v tom prípade reprezentovaná<br />

ako súkromný atribút triedy. Ak táto inštancia neexistuje, vytvorí sa, uloží<br />

a metóda vráti referenciu na u. Inak sa priamo vracia táto referencia.<br />

Tento prístup predstavuje pomalú inicializáciu (angl. lazy initialization), pretože inštancia<br />

sa vytvára až pri prvej požiadavke na jej získanie.<br />

1.1.6 Príklad<br />

Príkladom využitia aplikácie môže by aj spomínaný vlastný denník aplikácie (angl. log).<br />

Schematický nárt jeho implementácie poskytuje príklad 1-1.<br />

public class MyLog {<br />

private static MyLog* log;<br />

public static getInstance() {<br />

if (log==NULL) {<br />

log=new MyLog();<br />

//inicializacia a otvorenie suboru<br />

}<br />

return log;<br />

}<br />

public int write(char * message) {<br />

...<br />

}<br />

... //dalsie metody pre pracu s dennikom<br />

MyLog::log=NULL;<br />

Príklad 1-1. Zdrojový kód vzoru Unikát.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!