Lazy initialization: Porovnání verzí

Smazaný obsah Přidaný obsah
mBez shrnutí editace
mBez shrnutí editace
Řádek 6:
 
Odložená inicializace je pak často využívá s jinými návrhovými vzory, jako jsou [[Factory Method|Tovární metoda]] (Factory Method), [[Singleton|Jedináček]] (Singleton) nebo [[Proxy]].
 
 
==Plusy==
* Inicializace objektu probíhá ve chvíli kdy je opravdu nutná
* Zrychluje se počáteční inicializace
 
 
==Minusy==
* Není možné vytvořit pořadí inicializovaných objektů
* Vzniká odezva při dotazování se na objekt
 
 
==Základní implementace==
 
Nejobyčejnější [[Java]] kód bez odložené inicializaci by mohl vypadat asi takto:
 
 
<source lang="java">
Řádek 31 ⟶ 27:
}
</source>
 
 
Objekt je vytvářen hned od začátku. Metoda '''getFoo()''' je rychlá ale [[Synchronizace|nesynchronizovaná]]. Pro jednoduché aplikace to bohatě stačí. Kdybychom ale přeci potřebovali pracovat s odloženou inicializací, museli bychom brat ohled i na aplikaci pracující s [[Vlákno_(program)|vlákny]].
 
 
<source lang="java">
Řádek 46 ⟶ 40:
}
</source>
 
 
Ve výše uvedené podobě je už vidět, že se objekt nevytvářel hned od začátku, ale počká se na zavolání synchronizované metody '''getFoo()''', která vrací objekt, pokud existuje, anebo pokud se jedná o první volání, ho vytvoří. Takový způsob ale zahrnuje i náklady na synchronizaci (když v poslední době poměrně malé). Kdybychom to chtěli optimalizovat i v tomto směru, můžeme využít i jiný způsob.
 
 
<source lang="java">
Řádek 61 ⟶ 53:
}
</source>
 
 
Když je metoda '''getFoo()''' volána poprvé, přečte atribut '''FooHolder.foo''', čímž způsobí inicializaci třídy '''FooHolder'''. Takže se zase jedná o odloženou inicializaci, ale zároveň vynecháváme potřebu synchronizovat, protože volání metody zajišťuje pouze přístup k atributu. Nevýhodou takového triku ale je, že pracuje pouze se statickými atributy.
 
 
==Příklad využití==
 
 
Jedná z možných situací, kdy je možné používat odloženou inicializaci je práce s [[Pole_(datová_struktura)|poli]]. Aby bylo vhodné využívat takový vzor, měla by práce s polem splňovat alespoň tyto podmínky
Řádek 77 ⟶ 66:
 
Jak je vidět, vytváření takového pole je poměrně náročné. Na druhou stranu pomoci Odložené inicializaci se problém zjednodušuje.
 
 
<source lang="java">
Řádek 107 ⟶ 95:
}
</source>
 
 
==Související články==
Řádek 113 ⟶ 100:
* [[Objektově orientované programování]]
* [[Programování]]
 
 
==Externí odkazy==