Prototyp (návrhový vzor): Porovnání verzí

Smazaný obsah Přidaný obsah
Bez shrnutí editace
m Oprava preklepu
Řádek 1:
Návrhový vzor Prototype patří do rodiny tzv. creational design patterns (vytvářecí [[Návrhový vzor|návrhové vzory]]).
 
Používá se, když je vytváření instance třídy velmi časově náročné nebo nějak výrazně složité. Potom je výhodnější než náročně vytvářet mnoho instancí, vytvořit jednu a ostatní objekty z ní naklonovat. Může být taketaké použit když jsou potřeba třídy, které se liší pouze v tom, jaké zpracování nabízejí.
 
Klonování se provádí implementací speciální metody, která vytvoří klon aktuálního objektu. Metoda může využívat systémové metody pro klonování (viz níže) nebo může objekt vytvářet jiným způsobem. Také může obsahovat další operace s objektem (změnu některých dat a vlastností objektu).
Řádek 11:
== Význam použití návrhového vzoru Prototype ==
 
Použitím návrhového vzoru Prototype je možné přidávat a odebírat třídy za běhu klonováním, kdykoliv je potřeba. Je možné korigovat vnitřní data v závislosti na stavu programu. Je taketaké možné specifikovat nové objekty, bez množení struktur tříd a dědičnosti.
Třídy, které mají zacyklené reference na další objekty nemohou být klonovány.
Využívá se i tzv. registr ProrotypůPrototypů (podobně jako registr Singletonů), kdy klonování obstarává registr a program se dotazuje registru.
Jak bylo zmíněno, při klonování může být vyžadování měnit některá data v závislosti na požadavcích programu. Pokud je taková potřeba očekávána, měla by třída implementovat taketaké metody na práci s daty objektu – číst a přiřazovat hodnoty do atributů objektu.
 
== Klonování ==
Řádek 197:
== Pravidla palce (rules of thumb) ==
 
Někdy se návrhové vzory překrývají – jsou případy, kdy Prototyp ani Abstraktní továrna nebude vhodné použít. Jindy zase doplňují jeden druhý: Abstraktní továrna může ukládat sadu Prototypů ze kterých se klonuje a vracejí se objekty (GoF, p126). Abstraktní továrna, Stavitel a Prototyp mohou použít při implementaci Jedináčka (Singleton) (GoF, p81, 134). Abstraktní továrna je často implmentovánaimplementována s Tovární metodou (vytváření přes dědičnost), ale mohou být taketaké vytvořeny pomocí Prototypu (vytváření přes pověření). (GoF, p95)<ref name="prototype pattern">[http://en.wikipedia.org/wiki/Prototype_pattern Prototype pattern], anglická verze článku na Wikipedii</ref>
 
Často začnou programátoři používat Tovární metodu (jednodušší, vice přizpůsobitelná) a následně se vyvine v Abstraktní továrnu, Prototyp nebo Stavitele (pružnější, komplexnější) poté, co programátor zjistí, kde je potřeba vicevíce flexibility (GoF, p136).<ref name="prototype pattern"/>
 
Rozdíl mezi Prototypem a Tovární metodou je, že Prototyp nevyžaduje dědění tříd, vyžaduje ale úvodní inicializaci. Naopak Tovární metoda vyžaduje dědění tříd, nevyžaduje inicializaci (GoF, p116).<ref name="prototype pattern"/>
Řádek 205:
Z Prototypu může mít užitek i design, který hojně využívá vzory Strom a Dekorátor. (GoF, p126)<ref name="prototype pattern"/>
 
Pokud budete potřebovat zavolat metodu clone() na objektu když budete chtít vytvořit další objekt při běhu, který je skutečnou kopií objektu, který klonujete. Skutečná kopie znamená, že všechny atributy nově vytvořeného objektu by měly být stejné, jako u původního. Pokud by byla třída vytvořena pomocí klíčového slova “new”, měl by objekt věchnyvšchny hodnoty s výchozími hodnotami. Např. pokud navrhujete systemsystém pro bankovní operace, budete chtít vytvořit kopikopii objektu, který udržuje informace o vašem účtu, provést na něm požadované operace a potom jím přepsat původní objekt. V tomto případě budete chtít použít metodu clone() místo “new”.<ref name="prototype pattern"/>
 
== Reference ==