Factory Method er et Kreationelt designmønster, der tillader en grænseflade eller en klasse at oprette et objekt, men lad underklasser bestemme, hvilken klasse eller objekt der skal instantieres. Ved hjælp af fabriksmetoden har vi de bedste måder at oprette et objekt på. Her oprettes objekter uden at udsætte logikken for klienten, og for at oprette den nye type af objektet bruger klienten den samme fælles grænseflade.
problemer, vi står over for uden Fabriksmetode:
Forestil dig, at du har din egen opstart, der giver ridesharing i de forskellige dele af landet. Den oprindelige version af appen giver kun tohjulede ridesharing, men som tiden går, bliver din app populær, og nu vil du også tilføje tre-og firehjulede ridesharing.
det er en god nyhed! men hvad med programmeludviklerne af din opstart. De er nødt til at ændre hele koden, for nu er størstedelen af koden kombineret med tohjulingsklassen, og udviklere skal foretage ændringer i hele kodebasen.
efter at have gjort med alle disse ændringer, slutter udviklerne enten med den rodede kode eller med fratrædelsesbrevet.
lokaliseringsapp
diagrammatisk repræsentation af problemer uden brug af Fabriksmetode
lad os forstå konceptet med endnu et eksempel, der er relateret til oversættelser og lokalisering af de forskellige sprog.
Antag, at vi har oprettet en app, hvis hovedformål er at oversætte et sprog til et andet, og i øjeblikket fungerer vores app kun med 10 sprog. Nu er vores app blevet meget populær blandt mennesker, men efterspørgslen er pludselig vokset til at omfatte 5 flere sprog.
det er en god nyhed! kun for ejeren ikke for udviklerne. De er nødt til at ændre hele koden, for nu er størstedelen af koden kun kombineret med de eksisterende sprog, og det er derfor, udviklere skal foretage ændringer i hele kodebasen, hvilket virkelig er en vanskelig opgave at gøre.
lad os se på koden for det problem, som vi måske står over for uden at bruge fabriksmetoden.
Bemærk: Følgende kode er skrevet uden brug af fabriksmetoden.
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))
løsning efter Fabriksmetode:
dens løsning er at erstatte de lige frem objektkonstruktionsopkald med opkald til den specielle fabriksmetode. Faktisk vil der ikke være nogen forskel i objektoprettelsen, men de kaldes inden for fabriksmetoden.
for eksempel: vores tohjul, Trehjul og Firehjulsklasser skal implementere ridesharing-grænsefladen, som vil erklære en metode kaldet ride. Hver klasse implementerer denne metode unikt.
solution_factory_diagram
lad os nu forstå fabriksmetoden ved hjælp af et eksempel:
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))
klassediagram til Fabriksmetode:
lad os se på klassediagrammet i betragtning af eksemplet med ridedeling.
Factory_pattern_class_diagrma
fordele ved at bruge Fabriksmetode:
- vi kan nemt tilføje de nye typer produkter uden at forstyrre den eksisterende klientkode.
- generelt undgås tæt kobling mellem produkterne og skaberklasserne og objekterne.
ulemper ved brug af Fabriksmetode:
- for at oprette en particluar beton produkt objekt, klient måske nødt til at sub-klasse skaberen klasse.
- du ender med et stort antal små filer, dvs.cluttering af filerne.
- i et grafiksystem kan det, afhængigt af brugerens input, tegne forskellige former som rektangel, firkant, cirkel osv. Men for at lette både udviklere og klienten kan vi bruge fabriksmetoden til at oprette forekomsten afhængigt af brugerens input. Så behøver vi ikke ændre klientkoden for at tilføje en ny form.
- på et hotelreservationssted kan vi bestille en plads til 1 værelse, 2 værelser, 3 værelser mv. Her kan brugeren indtaste antallet af værelser, han ønsker at bestille. Ved hjælp af fabriksmetoden kan vi oprette en Fabriksklasse AnyRooms, som vil hjælpe os med at oprette forekomsten afhængigt af brugerens input. Igen behøver vi ikke at ændre klientens kode for at tilføje den nye facilitet.
anvendelighed :
Læs mere: Fabriksmønster i C++