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==
|