Návrhový vzor tovární metody
Záměr
- Definujte rozhraní pro vytvoření objektu, ale nechejte podtřídy rozhodnout, která třída má být vytvořena. Factory Method umožňuje odložení instance třídy do podtříd.
- Definování „virtuálního“ konstruktoru.
- Provozovatel
new
považován za škodlivý.
Problém
Rámec musí standardizovat architektonický model pro celou řadu aplikací, ale musí umožnit jednotlivým aplikacím definovat své vlastní objekty a zajistit jejich instanci.
Diskuse
Tovární metodou je vytváření objektů, protože metoda šablon implementuje algoritmus. Nadtřída určuje veškeré standardní a obecné chování (pomocí čistých virtuálních „zástupných symbolů“ pro kroky vytvoření) a poté deleguje podrobnosti o vytvoření na podtřídy, které jsou dodávány klientem.
Díky Factory Method je design přizpůsobitelnější a jen málo komplikovanější. Jiné návrhové vzory vyžadují nové třídy, zatímco metoda Factory vyžaduje pouze novou operaci.
Lidé často používají metodu Factory jako standardní způsob vytváření objektů; není to ale nutné, pokud: třída, která je instancována nikdy změny nebo konání instance v operaci, kterou lze snadno přepsat podtřídami (například inicializační operace).
Tovární metoda je podobná abstraktní továrně, ale bez důrazových rodin.
Tovární metody jsou rutinně specifikovány architektonickým rámcem a poté implementovány uživatelem rámce.
Struktura
Implementace Factory metody popsané v Gang of Four (níže) se do značné míry překrývá s to z Abstract Factory. Z tohoto důvodu se prezentace v této kapitole zaměřuje na přístup, který se od té doby stal populárním.
Stále populárnější definice továrny metoda je: static
metoda třídy, která vrací objekt této třídy „typu. Ale na rozdíl od konstruktoru, aktuálněobjekt, který vrací, může být instancí podtřídy. Unlikea konstruktor, stávající objekt může být znovu použit, místo toho, aby byl vytvořen nový objekt. Na rozdíl od konstruktoru mohou mít tovární metody různé a popisnější názvy (např. Color.make_RGB_color(float red, float green, float blue)
a Color.make_HSB_color(float hue, float saturation, float brightness)
Klient je zcela oddělen od podrobností implementace odvozených tříd. Polymorfní tvorba je nyní možná.
Příklad
Tovární metoda definuje rozhraní pro vytváření objektů, ale letssubclasses rozhodují, které třídy mají vytvořit instanci. tento vzor. Výrobci plastových hraček zpracovávají plastový formovací prášek a vstřikují plast do forem požadovaných tvarů. Třída hračky (auto, akční figurka atd.) Je určena formou.
Kontrolní seznam
- Pokud máte hierarchii dědičnosti, která procvičuje polymorfismus, zvažte přidání možnosti polymorfního vytváření definováním tovární metody
static
v základní třídě. - Navrhněte argumenty podle tovární metody. Jaké vlastnosti nebo vlastnosti jsou nezbytné a dostatečné k identifikaci správné odvozené třídy pro vytvoření instance?
- Zvažte návrh interního „fondu objektů“, který umožní opakované použití objektů namísto vytvoření od začátku.
- Zvažte vytváření všech konstruktorů
private
neboprotected
.
Základní pravidla
- Abstraktní tovární třídy jsou často implementovány pomocí Factory Methods, ale lze je implementovat pomocí Prototype.
- Factory Methods se obvykle nazývají v rámci Template Methods.
- Factory Method: tvorba prostřednictvím dědičnosti . Prototyp: tvorba prostřednictvím delegování.
- Často se návrhy začínají používat Factory Method (méně komplikované, přizpůsobitelnější, podtřídy se šíří) a vyvíjejí se směrem k AbstractFactory, Prototype nebo Builder (flexibilnější, složitější), jak designér zjišťuje, kde více je nutná flexibilita.
- Prototyp nevyžaduje podtřídu, ale vyžaduje operaci Inicializace. Tovární metoda vyžaduje podtřídu, ale nevytváří inicializaci.
- Výhodou Tovární metody je že může vrátit stejnou instanci několikrát, nebo může vrátit podtřídu spíše než objekt tohoto přesného typu.
- Někteří zastánci tovární metody doporučují, aby jako jazyková koncepce (nebo pokud to selže, jako styl) ) absolutně všichni konstruktéři by měli být soukromí nebo chránění. Nejde o to, zda třída vyrábí nový objekt nebo recykluje starý objekt.
- Provozovatel
new
považoval za škodlivý. Existuje rozdíl mezi požadavkem na objekt a jeho vytvořením. Operátornew
vždy vytvoří objekt a nedokáže zapouzdřit vytvoření objektu.Tovární metoda vynucuje toto zapouzdření a umožňuje objekt požadovat, aniž by došlo k neoddělitelnému propojení s aktem stvoření.
Podporujte náš bezplatný web a vlastníte eBook!
- 22 návrhových vzorů a 8 principů podrobně vysvětleno
- 406 dobře strukturovaných, snadno čitelných stránek bez žargonu
- 228 jasných a užitečných ilustrací a schémat
- Archiv s příklady kódu ve 4 jazycích
- Všechna podporovaná zařízení: formáty EPUB / MOBI / PDF
Další informace …