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

Smazaný obsah Přidaný obsah
Bez shrnutí editace
Bez shrnutí editace
Řá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ána s Tovární metodou (vytváření přes dědičnost), ale mohou být take 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 vice 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"/>
 
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ěchny hodnoty s výchozími hodnotami. Např. pokud navrhujete system pro bankovní operace, budete chtít vytvořit kopi 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 ==