Factory metódus egy kreatív tervezési minta, amely lehetővé teszi, hogy egy felület vagy egy osztály hozzon létre egy objektumot, de hagyja, hogy az alosztályok eldöntsék, melyik osztályt vagy objektumot példányosítsák. A gyári módszerrel a legjobb módja van egy objektum létrehozásának. Itt az objektumok anélkül jönnek létre, hogy a logikát az ügyfél elé tárnák, az új típusú objektum létrehozásához pedig az ügyfél ugyanazt a közös felületet használja.
problémák, amelyekkel gyári módszer nélkül szembesülünk:
képzelje el, hogy saját startupja van, amely telekocsi szolgáltatást nyújt az ország különböző részein. Az alkalmazás kezdeti verziója csak a kétkerekű telekocsi szolgáltatást biztosítja, de az idő múlásával az alkalmazás népszerűvé válik, és most három-és négykerekű telekocsi is hozzáadásra kerül.
ez egy nagyszerű hír! de mi a helyzet az indítás szoftverfejlesztőivel. Meg kell változtatniuk az egész kódot, mert most a kód nagy része a kétkerekű osztályhoz kapcsolódik, és a fejlesztőknek módosítaniuk kell a teljes kódbázist.
miután elvégezte ezeket a változtatásokat, vagy a fejlesztők a rendetlen kóddal vagy a lemondó levéllel zárulnak.
Localizer app
Diagrammatikus ábrázolása problémák használata nélkül gyári módszer
értsük meg a koncepció még egy példát, amely kapcsolódik a fordítások és lokalizáció a különböző nyelveken.
tegyük fel, hogy létrehoztunk egy alkalmazást, amelynek fő célja az egyik nyelv lefordítása a másikra, és jelenleg az alkalmazásunk csak 10 nyelven működik. Most az alkalmazásunk széles körben népszerűvé vált az emberek körében, de a kereslet hirtelen nőtt, hogy további 5 nyelvet tartalmazzon.
ez egy nagyszerű hír! csak a tulajdonos számára, nem a fejlesztők számára. Meg kell változtatniuk az egész kódot, mert most a kód nagy része csak a meglévő nyelvekkel párosul, ezért a fejlesztőknek módosítaniuk kell a teljes kódbázist, ami valóban nehéz feladat.
nézzük meg a probléma kódját, amellyel a gyári módszer használata nélkül szembesülhetünk.
Megjegyzés: A következő kód A gyári módszer használata nélkül íródik.
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))
megoldás gyári módszerrel:
a megoldás az, hogy az egyenes objektumépítési hívásokat a speciális gyári módszerre hívja. Valójában nem lesz különbség az objektum létrehozásában, de a gyári módszeren belül hívják őket.
például: a Two_Wheeler, Three_Wheeler és Four_wheeler osztályoknak végre kell hajtaniuk a telekocsi felületet, amely deklarálja a ride nevű metódust. Minden osztály egyedileg hajtja végre ezt a módszert.
solution_factory_diagram
most értsük meg a gyári módszert egy példa segítségével:
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))
Osztálydiagram a gyári módszerhez:
nézzük meg az osztálydiagramot, figyelembe véve az útmegosztás példáját.
Gyár_pattern_class_diagrma
a gyári módszer használatának előnyei:
- könnyen hozzáadhatjuk az új típusú termékeket anélkül, hogy megzavarnánk a meglévő ügyfélkódot.
- Általánosságban elmondható, hogy a termékek és az alkotói osztályok és tárgyak közötti szoros kapcsolat elkerülhető.
a gyári módszer használatának hátrányai:
- a particluar concrete product objektum létrehozásához előfordulhat, hogy az ügyfélnek alosztályba kell sorolnia a creator osztályt.
- a végén hatalmas számú kis fájlokat, azaz, túlzsúfoltság a fájlokat.
- egy grafikus rendszerben a felhasználó bemenetétől függően különböző alakzatokat rajzolhat, például téglalapot, négyzetet, kört stb. De a könnyű mind a fejlesztők, valamint az ügyfél, tudjuk használni a gyári módszert, hogy hozzon létre a példány függően a felhasználó bemenet. Akkor nem kell megváltoztatnunk az ügyfélkódot egy új alakzat hozzáadásához.
- egy szállodai foglalási oldalon foglalhatunk helyet 1 szoba, 2 szoba, 3 szoba stb. Itt a felhasználó megadhatja a lefoglalni kívánt szobák számát. A gyári módszerrel létrehozhatunk egy gyári osztályt AnyRooms amely segít nekünk a példány létrehozásában a felhasználó bemenetétől függően. Ismét nem kell megváltoztatnunk az ügyfél kódját az új létesítmény hozzáadásához.
alkalmazhatóság :
további olvasás: gyári Minta C-ben++