GeeksforGeeks

Fabriksmetod är ett skapande designmönster som tillåter ett gränssnitt eller en klass att skapa ett objekt, men låt underklasser bestämma vilken klass eller objekt som ska instansieras. Med Fabriksmetoden har vi de bästa sätten att skapa ett objekt. Här skapas objekt utan att avslöja logiken för klienten och för att skapa den nya typen av objektet använder klienten samma gemensamma gränssnitt.

problem vi möter utan Fabriksmetod:

Tänk dig att du har din egen start som ger ridesharing i olika delar av landet. Den ursprungliga versionen av appen ger bara Tvåhjuling ridesharing men när tiden går blir din app populär och nu vill du lägga till tre och Fyrhjuling ridesharing också.
det är en bra nyhet! men hur är det med mjukvaruutvecklarna för din start. De måste ändra hela koden eftersom nu är det mesta av koden kopplad till tvåhjulingsklassen och utvecklare måste göra ändringar i hela kodbasen.
efter att ha gjort med alla dessa förändringar slutar utvecklarna med den röriga koden eller med avgångsbrevet.

factory-pattern-python

Localizer app

Schematisk representation av problem utan att använda Fabriksmetoden

Låt oss förstå konceptet med ytterligare ett exempel som är relaterat till översättningar och lokalisering av de olika språken.
Antag att vi har skapat en app vars huvudsyfte är att översätta ett språk till ett annat och för närvarande fungerar vår app endast med 10 språk. Nu har vår app blivit mycket populär bland människor men efterfrågan har plötsligt vuxit till att inkludera ytterligare 5 språk.
det är en bra nyhet! endast för ägaren inte för utvecklarna. De måste ändra hela koden eftersom nu är det mesta av koden kopplad till de befintliga språken bara och det är därför utvecklare måste göra ändringar i hela kodbasen vilket verkligen är en svår uppgift att göra.

Låt oss titta på koden för problemet som vi kan möta utan att använda fabriksmetoden.

notera: Följande kod skrivs utan att använda 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 Fabriksmetod:

dess lösning är att ersätta de rakt framåt objekt konstruktion samtal med samtal till den speciella fabriksmetoden. Egentligen kommer det inte att finnas någon skillnad i objektskapandet men de kallas inom fabriksmetoden.

till exempel: våra two_wheeler -, Three_Wheeler-och Four_wheeler-klasser bör implementera ridesharing-gränssnittet som kommer att förklara en metod som kallas ride. Varje klass kommer att implementera denna metod unikt.

python-factory-patter-solution

solution_factory_diagram

låt oss nu förstå fabriksmetoden med hjälp av ett exempel:

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



klassdiagram för Fabriksmetod:

Låt oss titta på klassdiagrammet med tanke på exemplet med kördelning.

 fabriksmönsterklass

Factory_pattern_class_diagrma

fördelar med att använda Fabriksmetod:

  1. vi kan enkelt lägga till nya typer av produkter utan att störa den befintliga klientkoden.
  2. i allmänhet undviks tät koppling mellan produkterna och skaparklasserna och objekten.

nackdelar med att använda Fabriksmetod:

  1. för att skapa ett particluar concrete product-objekt kan klienten behöva underklassa skaparklassen.
  2. du slutar med ett stort antal små filer, dvs cluttering av filerna.
  3. tillämplighet :

    1. i ett grafiksystem kan det, beroende på användarens inmatning, rita olika former som Rektangel, kvadrat, cirkel etc. Men för att underlätta både utvecklare och klienten kan vi använda fabriksmetoden för att skapa instansen beroende på användarens inmatning. Då behöver vi inte ändra klientkoden för att lägga till en ny form.
    2. på en hotellbokningssida kan vi boka en plats för 1 rum, 2 rum, 3 rum etc. Här kan användaren ange antalet rum han vill boka. Med fabriksmetoden kan vi skapa en fabriksklass AnyRooms som hjälper oss att skapa instansen beroende på användarens inmatning. Återigen behöver vi inte ändra kundens kod för att lägga till den nya anläggningen.

    läs vidare: Fabriksmönster i C++

artikel Tags:

Lämna ett svar

Din e-postadress kommer inte publiceras.

Previous post selegilin depotplåster (Emsam) för egentlig depression
Next post 6 tecknar din luftkonditionering kompressor är dålig