GeeksforGeeks

Factory Method is een creatief ontwerppatroon waarmee een interface of een klasse Een object kan maken, maar laat subklassen beslissen welke klasse of object te installeren. Met behulp van de fabriek methode, we hebben de beste manieren om een object te maken. Hier worden objecten gemaakt zonder de logica aan de client bloot te stellen en voor het maken van het nieuwe type van het object gebruikt de client dezelfde gemeenschappelijke interface.

problemen waarmee we worden geconfronteerd zonder fabrieksmethode:

stel je voor dat je een eigen opstart hebt die ridesharing biedt in de verschillende delen van het land. De eerste versie van de app biedt alleen de tweewieler ridesharing, maar naarmate de tijd verstrijkt, uw app wordt populair en nu wilt u drie en vierwieler ridesharing ook toe te voegen.
het is geweldig nieuws! maar hoe zit het met de software-ontwikkelaars van uw startup. Ze moeten de hele code veranderen omdat nu het grootste deel van de code is gekoppeld aan de tweewieler klasse en ontwikkelaars moeten wijzigingen aanbrengen in de hele codebase.
na al deze wijzigingen eindigen de ontwikkelaars met de rommelige code of met de ontslagbrief.

factory-pattern-python

Localizer app

diagrammatische weergave van problemen zonder fabrieksmethode

laten we het concept begrijpen met nog een voorbeeld dat gerelateerd is aan de vertalingen en lokalisatie van de verschillende talen.
stel dat we een app hebben gemaakt waarvan het belangrijkste doel is om de ene taal in een andere te vertalen en momenteel werkt onze app alleen met 10 talen. Nu is onze app is geworden op grote schaal populair onder mensen, maar de vraag is plotseling gegroeid tot 5 Meer talen.
het is geweldig nieuws! alleen voor de eigenaar niet voor de ontwikkelaars. Ze moeten de hele code veranderen omdat nu het grootste deel van de code is gekoppeld aan de bestaande talen alleen en dat is de reden waarom ontwikkelaars moeten wijzigingen in de hele codebase, dat is echt een moeilijke taak om te doen.

laten we eens kijken naar de code voor het probleem dat we kunnen tegenkomen zonder gebruik te maken van de factory methode.

Noot: De volgende code wordt geschreven zonder gebruik te maken van de fabriek methode.

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



oplossing volgens de fabrieksmethode:

de oplossing is het vervangen van de eenvoudige objectconstructieaanroepen door oproepen naar de speciale fabrieksmethode. Eigenlijk zal er geen verschil zijn in de object creatie maar ze worden aangeroepen binnen de factory methode.

bijvoorbeeld: onze klassen Two_Wheeler, Three_Wheeler en Four_wheeler zouden de ridesharing interface moeten implementeren die een methode genaamd ride zal declareren. Elke klasse zal deze methode uniek implementeren.

python-factory-patter-solution

solution_factory_diagram

laat ons nu de factory-methode begrijpen met behulp van een voorbeeld:

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



Class Diagram voor de Fabriek Methode:

Laten we eens kijken naar het klassendiagram, uitgaande van het voorbeeld van een rit te delen.

fabriekspatroon-klasse

Factory_pattern_class_diagrma

voordelen van het gebruik van de fabrieksmethode:

  1. we kunnen eenvoudig de nieuwe soorten producten toevoegen zonder de bestaande clientcode te verstoren.
  2. in het algemeen wordt nauwe koppeling tussen de producten en de scheppersklassen en objecten vermeden.

nadelen van het gebruik van de fabrieksmethode:

  1. om een particluar concrete product object te creëren, client kan hebben om sub-klasse van de maker klasse.
  2. je eindigt met een groot aantal kleine bestanden, dat wil zeggen, een rommel van de bestanden.
  3. toepasselijkheid :

    1. in een grafisch systeem kan het, afhankelijk van de invoer van de gebruiker, verschillende vormen tekenen zoals rechthoek, vierkant, cirkel, enz. Maar voor het gemak van zowel ontwikkelaars als de client, kunnen we de fabriek methode gebruiken om de instantie te maken, afhankelijk van de input van de gebruiker. Dan hoeven we de client code niet te veranderen voor het toevoegen van een nieuwe vorm.
    2. op een hotelreserveringssite kunnen we een sleuf boeken voor 1 kamer, 2 kamers, 3 kamers, enz. Hier kan de gebruiker het aantal kamers invoeren dat hij wil boeken. Met behulp van de fabriek methode, kunnen we een fabriek klasse AnyRooms die ons zal helpen om de instantie te maken, afhankelijk van de input van de gebruiker. Opnieuw hoeven we de code van de klant niet te wijzigen voor het toevoegen van de nieuwe faciliteit.

    Lees verder: Fabriekspatroon in C++

markeringen van het artikel:

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.

Previous post Selegiline pleister voor transdermaal gebruik (Emsam) voor depressieve stoornis
Next post 6 Tekenen De Compressor van uw airconditioner is slecht