GeeksforGeeks

Factory Method este un model de design creativ care permite unei interfețe sau unei clase să creeze un obiect, dar lasă subclasele să decidă ce clasă sau obiect să instantieze. Folosind metoda din fabrică, avem cele mai bune modalități de a crea un obiect. Aici, obiectele sunt create fără a expune logica clientului și pentru crearea noului tip de obiect, clientul folosește aceeași interfață comună.

probleme cu care ne confruntăm fără metoda din fabrică:

Imaginați-vă că aveți propria pornire, care oferă ridesharing în diferite părți ale țării. Versiunea inițială a aplicației oferă doar două roți ridesharing, dar pe măsură ce trece timpul, aplicația devine popular și acum doriți să adăugați trei și patru roți, de asemenea, ridesharing.
este o veste minunată! dar ce zici de dezvoltatorii de software ai startup-ului tău. Ei trebuie să schimbe întregul cod, deoarece acum cea mai mare parte a codului este cuplată cu clasa cu două roți, iar dezvoltatorii trebuie să facă modificări în întreaga bază de cod.
după ce ați terminat cu toate aceste modificări, fie dezvoltatorii se termină cu codul dezordonat, fie cu scrisoarea de demisie.

factory-pattern-python

Localizer app

reprezentarea Diagramatică a problemelor fără a utiliza metoda din fabrică

să înțelegem conceptul cu încă un exemplu care este legat de traducerile și localizarea diferitelor limbi.
să presupunem că am creat o aplicație al cărei scop principal este de a traduce o limbă în alta și în prezent aplicația noastră funcționează doar cu 10 limbi. Acum, aplicația noastră a devenit foarte populară în rândul oamenilor, dar cererea a crescut brusc pentru a include încă 5 limbi.
este o veste minunată! numai pentru proprietar, nu pentru dezvoltatori. Ei trebuie să schimbe întregul cod, deoarece acum cea mai mare parte a codului este cuplată doar cu limbile existente și de aceea dezvoltatorii trebuie să facă modificări în întreaga bază de cod, ceea ce este într-adevăr o sarcină dificilă de făcut.

să ne uităm la codul pentru problema cu care ne putem confrunta fără a utiliza metoda din fabrică.

notă: Următorul cod este scris fără a utiliza metoda din fabrică.

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))



soluție prin metoda din fabrică:

soluția sa este de a înlocui apelurile de construcție a obiectelor directe cu apeluri către metoda specială din fabrică. De fapt, nu va exista nici o diferență în crearea obiectului, dar acestea sunt numite în cadrul metodei din fabrică.

de exemplu: clasele noastre Two_Wheeler, Three_Wheeler și Four_wheeler ar trebui să implementeze interfața ridesharing care va declara o metodă numită ride. Fiecare clasă va implementa această metodă în mod unic.

python-factory-patter-solution

solution_factory_diagram

acum să înțelegem metoda din fabrică cu ajutorul unui exemplu:

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))



diagrama de clasă pentru metoda din fabrică:

să ne uităm la diagrama de clasă luând în considerare exemplul de partajare a călătoriei.

 fabrica-model-clasa

Factory_pattern_class_diagrma

avantajele utilizării metodei din fabrică:

  1. putem adăuga cu ușurință noile tipuri de produse fără a deranja codul clientului existent.
  2. în general, se evită cuplarea strânsă între produse și clasele și obiectele creatorului.

dezavantaje ale utilizării metodei din fabrică:

  1. pentru a crea un obiect de produs din beton particular, clientul ar putea fi nevoit să subclaseze clasa creator.
  2. ai termina cu număr foarte mare de fișiere mici, adică, aglomerarea de fișiere.
  3. aplicabilitate :

    1. într-un sistem grafic, în funcție de intrarea utilizatorului, acesta poate desena diferite forme precum dreptunghi, pătrat, cerc etc. Dar pentru ușurința atât a dezvoltatorilor, cât și a clientului, putem folosi metoda din fabrică pentru a crea instanța în funcție de intrarea utilizatorului. Atunci nu trebuie să schimbăm codul clientului pentru a adăuga o nouă formă.
    2. într-un site de rezervare a hotelului, putem rezerva un slot pentru 1 cameră, 2 camere, 3 camere etc. Aici utilizatorul poate introduce numărul de camere pe care dorește să le rezerve. Folosind metoda din fabrică, putem crea o clasă de fabrică anyrooms care ne va ajuta să creăm instanța în funcție de intrarea utilizatorului. Din nou, nu trebuie să schimbăm codul clientului pentru adăugarea noii facilități.

    citiți mai departe: modelul fabricii în C++

articolul Tags:

Lasă un răspuns

Adresa ta de email nu va fi publicată.

Previous post selegilină plasture transdermic (Emsam) pentru tulburarea depresivă majoră
Next post 6 Semne compresor de aer conditionat este rău