Modello Factory
Quando lo sviluppo di codice, è possibile creare istanze di oggetti direttamente i metodi o classi. Mentre questo è abbastanza normale, potresti voler aggiungere un’astrazione extra tra la creazione dell’oggetto e dove viene utilizzato nel tuo progetto.
È possibile utilizzare il modello di fabbrica per aggiungere quell’astrazione extra. Il modello di fabbrica è uno dei modelli più facili da capire e implementare.
L’aggiunta di un’astrazione extra ti consentirà anche di scegliere dinamicamente le classi da istanziare in base a un qualche tipo di logica.
Prima dell’astrazione, la classe o il metodo creerebbero direttamente una classe concreta. Dopo aver aggiunto l’astrazione factory, la classe concrete viene ora creata al di fuori della classe/metodo corrente e ora in una sottoclasse.
Immagina un’applicazione per la progettazione di case e la casa ha una sedia già aggiunta sul pavimento per impostazione predefinita. Aggiungendo il modello di fabbrica, si potrebbe dare la possibilità all’utente di scegliere diverse sedie, e quanti in fase di esecuzione. Invece che la sedia sia codificata nel progetto quando è iniziata, l’utente ha ora la possibilità di scegliere.
Aggiungere questa astrazione extra significa anche che le complicazioni dell’istanziazione di oggetti extra possono ora essere nascoste dalla classe o dal metodo che lo sta usando.
Questa separazione rende anche il codice più facile da leggere e documentare.
Il modello di fabbrica consiste in realtà nell’aggiungere quell’astrazione extra tra la creazione dell’oggetto e il luogo in cui viene utilizzato. Questo ti dà opzioni extra che puoi estendere più facilmente in futuro.
- Creatore concreto: L’applicazione client, la classe o il metodo che chiama il Creatore (metodo di fabbrica).
- Interfaccia prodotto: l’interfaccia che descrive gli attributi e i metodi richiesti dalla Fabbrica per creare il prodotto/oggetto finale.
- Creatore: La classe di fabbrica. Dichiara il metodo di fabbrica che restituirà l’oggetto richiesto da esso.
- Prodotto concreto: L’oggetto restituito dalla fabbrica. L’oggetto implementa l’interfaccia del prodotto.
Fabbrica Diagramma UML
Codice Sorgente
In questo concetto di esempio, il cliente vuole un oggetto denominato b
Piuttosto che la creazione di b
direttamente nel client, chiede il creatore (di fabbrica) per l’oggetto, invece.
La factory trova la classe pertinente utilizzando un qualche tipo di logica dagli attributi della richiesta. Chiede quindi alla sottoclasse di istanziare il nuovo oggetto che restituisce come riferimento al client che lo richiede.
./factory/factory_concept.py
"""
The Factory Pattern Concept
https://sbcode.net/python/factory/#factoryfactory_conceptpy
"""from abc import ABCMeta, abstractmethodclass IProduct(metaclass=ABCMeta):
"A Hypothetical Class Interface (Product)" @staticmethod
@abstractmethod
def create_object():
"An abstract interface method"class ConcreteProductA(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductA" def create_object(self):
return selfclass ConcreteProductB(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductB" def create_object(self):
return selfclass ConcreteProductC(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductC" def create_object(self):
return selfclass Creator:
"The Factory Class" @staticmethod
def create_object(some_property):
"A static method to get a concrete product"
if some_property == 'a':
return ConcreteProductA()
if some_property == 'b':
return ConcreteProductB()
if some_property == 'c':
return ConcreteProductC()
return None# The Client
PRODUCT = Creator().create_object('b')
print(PRODUCT.name)
Uscita
python ./factory/factory_concept.py
ConcreteProductB
Modello di fabbrica Panoramica Video
Esempio di caso d’uso
Visita i modelli di progettazione di fabbrica in Python (sbcode.net) per un caso d’uso di esempio del modello di fabbrica.
Un caso d’uso di esempio è un’interfaccia utente in cui l’utente può selezionare da un menu di elementi, come sedie.
All’utente è stata data una scelta utilizzando una sorta di interfaccia di navigazione, e non si sa quale scelta, o quanti l’utente farà fino a quando l’applicazione è effettivamente in esecuzione e l’utente inizia ad usarlo.
Quindi, quando l’utente ha selezionato la sedia, la factory prende alcune proprietà coinvolte in quella selezione, come un ID, un Tipo o un altro attributo e quindi decide quale sottoclasse pertinente istanziare per restituire l’oggetto appropriato.
Vedere la gif sopra per un esempio molto grafico di un esempio del mondo reale di utilizzo del modello di fabbrica per restituire oggetti chair. Il pannello a sinistra contiene sedie e quando si trascina e rilascia una sedia sul pannello a destra, chiama la fabbrica di sedie per restituirle una sedia.
Modello di fabbrica Caso d’uso Video
Sommario
- Il modello di fabbrica è un’interfaccia che rimanda la creazione dell’oggetto finale a una sottoclasse.
- Il modello di fabbrica riguarda l’inserimento di un altro livello/astrazione tra l’istanziazione di un oggetto e dove nel codice viene effettivamente utilizzato.
- Non si sa quali o quanti oggetti dovranno essere creati fino al runtime.
- Si desidera localizzare la conoscenza delle specifiche di istanziare un particolare oggetto alla sottoclasse in modo che il client non debba preoccuparsi dei dettagli.
- Si desidera creare un framework esterno, che un’applicazione può importare/fare riferimento e nascondere i dettagli delle specifiche coinvolte nella creazione dell’oggetto/prodotto finale.
- Il fattore unico che definisce il modello di fabbrica è che il progetto ora rimanda la creazione di oggetti alla sottoclasse a cui la fabbrica lo aveva delegato.
Modelli di progettazione In Python (Libro)
A volte si desidera solo per spegnere il computer e leggere da un libro. Quindi, questo modello, oltre a tutti gli altri modelli GoF sono discussi nei miei modelli di progettazione Nel libro Python ASIN B08XLJ8Z2J