GeeksforGeeks

Factory Method è un modello di progettazione creativa che consente a un’interfaccia o una classe di creare un oggetto, ma lascia che le sottoclassi decidano quale classe o oggetto creare un’istanza. Utilizzando il metodo di fabbrica, abbiamo i modi migliori per creare un oggetto. Qui, gli oggetti vengono creati senza esporre la logica al client e per creare il nuovo tipo di oggetto, il client utilizza la stessa interfaccia comune.

Problemi che affrontiamo senza metodo di fabbrica:

Immagina di avere la tua startup che fornisce il ridesharing nelle diverse parti del paese. La versione iniziale dell’app fornisce solo il ridesharing a due ruote, ma con il passare del tempo, la tua app diventa popolare e ora vuoi aggiungere anche il ridesharing a tre e quattro ruote.
È una grande notizia! ma per quanto riguarda gli sviluppatori di software del vostro avvio. Devono cambiare l’intero codice perché ora la maggior parte del codice è accoppiata con la classe a due ruote e gli sviluppatori devono apportare modifiche all’intera base di codice.
Dopo aver fatto tutte queste modifiche, gli sviluppatori terminano con il codice disordinato o con la lettera di dimissioni.

factory-pattern-python

Localizer app

Rappresentazione schematica dei problemi senza l’utilizzo del Metodo Factory

Comprendiamo il concetto con un altro esempio relativo alle traduzioni e alla localizzazione delle diverse lingue.
Supponiamo di aver creato un’app il cui scopo principale è tradurre una lingua in un’altra e attualmente la nostra app funziona solo con 10 lingue. Ora la nostra applicazione è diventata molto popolare tra le persone, ma la domanda è cresciuta improvvisamente per includere 5 più lingue.
È una grande notizia! solo per il proprietario non per gli sviluppatori. Devono cambiare l’intero codice perché ora la maggior parte del codice è accoppiata solo con le lingue esistenti ed è per questo che gli sviluppatori devono apportare modifiche all’intera base di codice che è davvero un compito difficile da fare.

Diamo un’occhiata al codice per il problema che potremmo affrontare senza usare il metodo factory.

Nota: Il seguente codice viene scritto senza utilizzare il metodo di fabbrica.

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



Soluzione con il metodo di fabbrica:

La sua soluzione consiste nel sostituire le chiamate di costruzione di oggetti diretti con chiamate al metodo speciale di fabbrica. In realtà non ci sarà alcuna differenza nella creazione dell’oggetto, ma vengono chiamati all’interno del metodo factory.

Ad esempio: Le nostre classi Two_Wheeler, Three_Wheeler e Four_wheeler dovrebbero implementare l’interfaccia di ridesharing che dichiarerà un metodo chiamato ride. Ogni classe implementerà questo metodo in modo univoco.

 python-factory-patter-solution

solution_factory_diagram

Ora cerchiamo di capire il metodo di fabbrica con l’aiuto di un esempio:

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



Diagramma di Classe per la Fabbrica di Metodo:

vediamo il diagramma di classe considerando l’esempio di ride sharing.

factory-pattern-class

Factory_pattern_class_diagrma

Vantaggi dell’utilizzo del metodo di fabbrica:

  1. Possiamo facilmente aggiungere i nuovi tipi di prodotti senza disturbare il codice client esistente.
  2. Generalmente, si evita l’accoppiamento stretto tra i prodotti e le classi e gli oggetti del creatore.

Svantaggi dell’utilizzo del metodo di fabbrica:

  1. Per creare un oggetto particluar concrete product, il client potrebbe dover sottoclasse la classe creator.
  2. Si finisce con un numero enorme di piccoli file, ad esempio, ingombrando i file.
  3. Applicabilità :

    1. In un sistema grafico, a seconda dell’input dell’utente, può disegnare forme diverse come Rettangolo, Quadrato, cerchio, ecc. Ma per la facilità sia degli sviluppatori che del client, possiamo utilizzare il metodo factory per creare l’istanza in base all’input dell’utente. Quindi non dobbiamo cambiare il codice client per aggiungere una nuova forma.
    2. In un sito di prenotazione alberghiera, possiamo prenotare uno slot per 1 camera, 2 camere, 3 camere, ecc. Qui l’utente può inserire il numero di camere che vuole prenotare. Usando il metodo factory, possiamo creare una classe factory AnyRooms che ci aiuterà a creare l’istanza in base all’input dell’utente. Ancora una volta non dobbiamo cambiare il codice del cliente per aggiungere la nuova struttura.

    Leggi ulteriormente: Modello di fabbrica in C++

Tag articolo:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Previous post Selegiline Cerotto Transdermico (Emsam) per il Disturbo Depressivo Maggiore
Next post 6 Segni Compressore del condizionatore d’aria è male