Factory Method on Creational Design Pattern, joka sallii käyttöliittymän tai luokan luoda objektin, mutta antaa alaluokkien päättää minkä luokan tai objektin instantioida. Tehdasmenetelmällä meillä on parhaat tavat luoda objekti. Tässä objektit luodaan paljastamatta logiikkaa asiakkaalle ja uuden oliotyypin luomiseen asiakas käyttää samaa yhteistä rajapintaa.
ongelmat, joita kohtaamme ilman Tehdasmenetelmää:
Kuvittele, että sinulla on oma startup, joka tarjoaa kimppakyytejä eri puolilla maata. Sovelluksen alkuperäinen versio tarjoaa vain kaksipyöräisen kimppakyydin, mutta ajan myötä sovelluksestasi tulee suosittu ja nyt haluat lisätä myös kolmi-ja nelipyöräisen kimppakyydin.
It ’ s a piece of great news! mutta entä Oman startupin ohjelmistokehittäjät. Heidän on muutettava koko koodi, koska nyt suurin osa koodista on yhdistetty kaksipyöräiseen luokkaan ja kehittäjien on tehtävä muutoksia koko koodiin.
kun kaikki nämä muutokset on tehty, joko Kehittäjät päättyvät sotkuiseen koodiin tai erokirjeeseen.
Localizer app
Diagramminen esitys ongelmista ilman Tehdasmenetelmää
ymmärretään käsite vielä yhdellä esimerkillä, joka liittyy eri kielten käännöksiin ja lokalisointiin.
Oletetaan, että olemme luoneet sovelluksen, jonka päätarkoitus on kääntää yksi kieli toiselle ja tällä hetkellä sovelluksemme toimii vain 10 kielellä. Nyt meidän sovellus on tullut laajalti suosittu ihmisten keskuudessa, mutta kysyntä on kasvanut yhtäkkiä sisällyttää 5 enemmän kieliä.
It ’ s a piece of great news! vain omistajalle, ei kehittäjille. Heidän on muutettava koko koodi, koska nyt suurin osa koodista on yhdistetty vain olemassa oleviin kieliin, ja siksi kehittäjien on tehtävä muutoksia koko koodiin, joka on todella vaikea tehtävä.
katsotaanpa koodia sille ongelmalle, jonka voimme kohdata ilman tehdasmenetelmää.
Huom.: Seuraava koodi kirjoitetaan ilman Tehdasmenetelmää.
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))
ratkaisu Tehdasmenetelmällä:
sen ratkaisu on korvata suoraviivaiset esinerakennuskutsut erikoisen tehdasmenetelmän kutsuilla. Itse asiassa ei ole mitään eroa objektin luomiseen, mutta niitä kutsutaan sisällä tehtaan menetelmällä.
esimerkiksi: Kaksi_wheeler -, Kolme_wheeler-ja Neljä_wheeler-luokkaamme ottavat käyttöön kimppakyytirajapinnan, joka julistaa menetelmän nimeltä ride. Jokainen luokka toteuttaa tämän menetelmän yksilöllisesti.
ratkaisu_faktori_diagram
nyt selvitetään tehdasmenetelmä esimerkin avulla:
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))
luokkakaavio Tehdastapaan:
katsotaan luokkakaaviota ottaen huomioon esimerkin kyydin jakamisesta.
Factory_pattern_class_diagrma
Tehdasmenetelmän käytön edut:
- voimme helposti lisätä uudentyyppisiä tuotteita häiritsemättä olemassa olevaa asiakaskoodia.
- tuotteiden ja luojaluokkien ja-esineiden välillä pyritään yleensä välttämään tiukkaa kytkentää.
Tehdasmenetelmän käytön haitat:
- luoda particluar konkreettinen tuote objekti, asiakas voi joutua alaluokan luoja Luokka.
- päädytään valtavaan määrään pieniä tiedostoja eli tiedostojen sotkemiseen.
- Grafiikkajärjestelmässä se voi käyttäjän syötöstä riippuen piirtää erilaisia muotoja, kuten suorakulmion, neliön,ympyrän jne. Mutta helppous sekä kehittäjien sekä asiakkaan, Voimme käyttää tehtaan menetelmää luoda esimerkiksi riippuen käyttäjän syötteestä. Sitten meidän ei tarvitse muuttaa asiakaskoodia uuden muodon lisäämiseksi.
- hotellin varaussivustolla voi varata paikan 1 huoneelle, 2 huoneelle, 3 huoneelle jne. Tähän käyttäjä voi syöttää haluamansa huoneiden määrän. Tehdasmenetelmällä voimme luoda tehdasluokan minkä tahansa huoneen, joka auttaa meitä luomaan instanssin käyttäjän syötteen mukaan. Jälleen meidän ei tarvitse muuttaa asiakkaan koodia lisäämällä uusi laitos.
soveltaminen :
Lue lisää: Tehdaskuvio C++