Factory Method Er En Creational Design Mønster som gjør at et grensesnitt eller en klasse for å lage et objekt, men la underklasser bestemme hvilken klasse eller objekt å instantiate. Ved Hjelp Av Fabrikkmetoden har vi de beste måtene å lage et objekt på. Her opprettes objekter uten å utsette logikken til klienten, og for å opprette den nye typen av objektet bruker klienten det samme felles grensesnittet.
Problemer vi står overfor Uten Fabrikkmetode:
Tenk deg at du har din egen oppstart som gir ridesharing i de forskjellige delene av landet. Den første versjonen av appen gir bare To-Wheeler ridesharing, men etter hvert som tiden går, blir appen din populær, og nå vil du legge Til Tre og Fire-Wheeler ridesharing også.
det er en del gode nyheter! men hva med programvareutviklerne av oppstarten din. De må endre hele koden fordi nå er det meste av koden kombinert Med Tohjulsklassen, og utviklere må gjøre endringer i hele kodebasen.
etter ferdig med alle disse endringene, slutter utviklerne med rotete koden eller med oppsigelsesbrevet.
Localizer app
Diagrammatisk representasjon Av Problemer uten Å bruke Fabrikkmetode
La oss forstå konseptet med et annet eksempel som er relatert til oversettelser og lokalisering av de forskjellige språkene.
Anta at vi har opprettet en app hvis hovedformål er å oversette ett språk til et annet, og for tiden fungerer vår app bare med 10 språk. Nå har vår app blitt populært blant folk, men etterspørselen har vokst plutselig til å inkludere 5 flere språk.
det er en del gode nyheter! bare for eieren ikke for utviklerne. De må endre hele koden fordi nå er det meste av koden kombinert med eksisterende språk, og derfor må utviklere gjøre endringer i hele kodebasen, noe som virkelig er en vanskelig oppgave å gjøre.
La oss se på koden for problemet som vi kan møte uten å bruke fabrikkmetoden.
Notat: Følgende kode er skrevet uten Å bruke Fabrikkmetoden.
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 Ved Fabrikkmetode:
løsningen er å erstatte rett frem objektkonstruksjonssamtaler med samtaler til den spesielle fabrikkmetoden. Egentlig vil det ikke være noen forskjell i objektopprettelsen, men de blir kalt i fabrikkmetoden.
for eksempel: Våre two_wheeler -, Three_Wheeler-og Four_wheeler-klasser skal implementere ridesharing-grensesnittet som vil erklære en metode som kalles ride. Hver klasse vil implementere denne metoden unikt.
solution_factory_diagram
La Oss nå forstå fabrikkmetoden ved hjelp av 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 For Fabrikkmetode:
La oss se på klassediagrammet som vurderer eksemplet på ridedeling.
Faktory_pattern_class_diagrma
Fordeler Ved Bruk Av Fabrikkmetode:
- Vi kan enkelt legge til nye typer produkter uten å forstyrre den eksisterende klientkoden.
- vanligvis unngås tett kobling mellom produktene og skaperklassen og objektene.
Ulemper Ved Bruk Av Fabrikkmetode:
- for å lage et particluar concrete product-objekt, må klienten kanskje underklasse creator-klassen.
- du ender opp med stort antall små filer, dvs. cluttering av filene.
- i Et Grafikksystem, avhengig av brukerens inngang, kan det tegne forskjellige former som Rektangel, Firkant, Sirkel, etc. Men for enkelheten til både utviklere og klienten, kan vi bruke fabrikkmetoden til å lage forekomsten avhengig av brukerens inngang. Da trenger vi ikke å endre klientkoden for å legge til en ny form.
- i Et hotell booking nettsted, kan vi bestille en slot for 1 rom, 2 rom, 3 rom, etc. Her kan brukeren legge inn antall rom han ønsker å bestille. Ved hjelp av fabrikkmetoden kan vi lage en fabrikkklasse AnyRooms som vil hjelpe oss med å lage forekomsten avhengig av brukerens inngang. Igjen trenger vi ikke å endre kundens kode for å legge til det nye anlegget.
Anvendelighet :
videre les: Fabrikk Mønster I C++