Tovární Metoda je Creational Design Vzor, který umožňuje rozhraní nebo třídy vytvořit objekt, ale ať podtřídy rozhodnout, která třída nebo objekt, který chcete vytvořit instanci. Pomocí tovární metody máme nejlepší způsoby, jak vytvořit objekt. Zde jsou objekty vytvářeny bez vystavení logiky klientovi a pro vytvoření nového typu objektu klient používá stejné společné rozhraní.
problémy, kterým čelíme bez tovární metody:
Představte si, že máte svůj vlastní startup, který poskytuje spolujízdu v různých částech země. Počáteční verze aplikace poskytuje pouze Dva-Kolář spolujízda, ale jak plyne čas, vaše aplikace se stává populární a nyní chcete přidat Tři a Čtyři-Kolář spolujízda také.
je to skvělá zpráva! ale co vývojáři softwaru vašeho spuštění. Musí změnit celý kód, protože nyní je většina kódu spojena s třídou dvoukolek a vývojáři musí provést změny v celé kódové základně.
po dokončení všech těchto změn vývojáři končí chaotickým kódem nebo rezignačním dopisem.
Localizer aplikace
Schematické znázornění Problémy bez pomocí Tovární Metody
Pojďme se pochopit koncept s ještě jeden příklad, který souvisí s překlady a lokalizace do různých jazyků.
Předpokládejme, že jsme vytvořili aplikaci, jejímž hlavním účelem je přeložit jeden jazyk do druhého a v současné době naše aplikace pracuje pouze s 10 jazyky. Nyní se naše aplikace stala mezi lidmi velmi populární, ale poptávka náhle vzrostla o dalších 5 jazyků.
je to skvělá zpráva! pouze pro majitele, nikoli pro vývojáře. Musí změnit celý kód, protože nyní je většina kódu spojena pouze s existujícími jazyky, a proto vývojáři musí provádět změny v celé kódové základně, což je opravdu obtížný úkol.
podívejme se na kód problému, kterému můžeme čelit bez použití tovární metody.
Poznámka: Následující kód je zapsán bez použití tovární metody.
class
FrenchLocalizer:
def
__init__(
self
):
self
.translations
=
{
"car"
:
"voiture"
,
"bike"
:
"bicyclette"
,
"cycle"
:
"cyclette"
}
def
localize(
self
, message):
return
self
.translations.get(msg, msg)
class
SpanishLocalizer:
def
__init__(
self
):
self
.translations
=
{
"car"
:
"coche"
,
"bike"
:
"bicicleta"
,
"cycle"
:
"ciclo"
}
def
localize(
self
, msg):
return
self
.translations.get(msg, msg)
class
EnglishLocalizer:
def
localize(
self
, msg):
return
msg
if
__name__
=
=
"__main__"
:
f
=
FrenchLocalizer()
e
=
EnglishLocalizer()
s
=
SpanishLocalizer()
message
=
for
msg
in
message:
print
(f.localize(msg))
print
(e.localize(msg))
print
(s.localize(msg))
řešení tovární metodou:
jeho řešením je nahradit přímé volání konstrukce objektu voláním na speciální tovární metodu. Ve skutečnosti nebude žádný rozdíl ve vytváření objektů, ale jsou volány v rámci tovární metody.
například: naše třídy Two_Wheeler, Three_Wheeler a Four_wheeler by měly implementovat rozhraní ridesharing, které deklaruje metodu zvanou ride. Každá třída implementuje tuto metodu jedinečně.
solution_factory_diagram
Teď pojďme pochopit, tovární metoda, s pomocí příkladu:
class
FrenchLocalizer:
def
__init__(
self
):
self
.translations
=
{
"car"
:
"voiture"
,
"bike"
:
"bicyclette"
,
"cycle"
:
"cyclette"
}
def
localize(
self
, message):
return
self
.translations.get(msg, msg)
class
SpanishLocalizer:
def
__init__(
self
):
self
.translations
=
{
"car"
:
"coche"
,
"bike"
:
"bicicleta"
,
"cycle"
:
"ciclo"
}
def
localize(
self
, msg):
return
self
.translations.get(msg, msg)
class
EnglishLocalizer:
def
localize(
self
, msg):
return
msg
def
Factory(language
=
"English"
):
localizers
=
{
"French"
: FrenchLocalizer,
"English"
: EnglishLocalizer,
"Spanish"
: SpanishLocalizer,
}
return
localizers()
if
__name__
=
=
"__main__"
:
f
=
Factory(
"French"
)
e
=
Factory(
"English"
)
s
=
Factory(
"Spanish"
)
message
=
for
msg
in
message:
print
(f.localize(msg))
print
(e.localize(msg))
print
(s.localize(msg))
Diagram tříd pro Tovární Metoda:
Pojďme se podívat na diagram tříd vzhledem příklad sdílení jízda.
Factory_pattern_class_diagrma
Výhody použití tovární metody:
- můžeme snadno přidat nové typy produktů bez narušení stávajícího klientského kódu.
- obecně se vyhýbá těsnému spojení mezi produkty a třídami a objekty tvůrců.
Nevýhody pomocí Tovární metody:
- vytvořit particluar konkrétní produkt objektu, klient může mít sub-třídy tvůrce třídy.
- skončíte s obrovským množstvím malých souborů, tj.
- v grafickém systému může v závislosti na vstupu uživatele kreslit různé tvary, jako je obdélník, čtverec, kruh atd. Ale pro snadnost jak vývojářů, tak klienta, můžeme použít tovární metodu k vytvoření instance v závislosti na vstupu uživatele. Pak nemusíme měnit kód klienta pro přidání nového tvaru.
- v rezervačním místě hotelu si můžeme rezervovat slot pro 1 pokoj, 2 pokoje, 3 pokoje atd. Zde může uživatel zadat počet pokojů, které chce rezervovat. Pomocí tovární metody můžeme vytvořit tovární třídu AnyRooms, která nám pomůže vytvořit instanci v závislosti na vstupu uživatele. Opět nemusíme měnit kód klienta pro přidání nového zařízení.
použitelnost :
další čtení: tovární vzor V C++