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
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
Třídy, které mají zacyklené reference na další objekty nemohou být klonovány.
Využívá se i tzv. registr
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
== 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
Č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
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
== Reference ==
|