Factory Method Design Pattern (Italiano)

Intent

  • Definisci uninterfaccia per creare un oggetto, ma lascia che le sottoclassi decidano quale classe istanziare. Factory Method consente la deferinanziazione di una classe a sottoclassi.
  • Definizione di un costruttore “virtuale”.
  • Loperatore new considerato dannoso.

Problema

Un framework deve standardizzare il modello architettonico per una serie di applicazioni, ma consentire alle singole applicazioni di definire i propri oggetti di dominio e provvedere alla loro istanziazione.

Discussione

Il Metodo Factory consiste nel creare oggetti come il Metodo Modello sta nellimplementare un algoritmo. Una superclasse specifica tutti i comportamenti standard e generici (utilizzando “segnaposto” virtuali puri per i passaggi di creazione), quindi delega i dettagli di creazione a sottoclassi fornite dal cliente.

Factory Method rende un design più personalizzabile e solo un po più complicato. Altri design pattern richiedono nuove classi, mentre Factory Method richiede solo una nuova operazione.

Le persone spesso usano Factory Method come metodo standard per creare oggetti; ma non è necessario se: la classe che è stata istanziata non modifiche o listanziazione avviene in unoperazione che le sottoclassi possono facilmente sovrascrivere (come unoperazione di inizializzazione).

Factory Method è simile a Abstract Factory ma senza le famiglie di enfasi.

Factory Methods vengono abitualmente specificati da un framework architetturale e quindi implementati dallutente del framework.

Struttura

Limplementazione del Factory Method discusso in Gang of Four (sotto) si sovrappone in gran parte con quello di Abstract Factory. Per questa ragione, la presentazione in questo capitolo si concentra sullapproccio che è diventato popolare da allora.

Una definizione sempre più popolare di fabbrica è: un static metodo di una classe che restituisce un oggetto di quel tipo di classe “. Ma a differenza di un costruttore, loggetto effettivo che restituisce potrebbe essere unistanza di una sottoclasse. A differenza di un costruttore, un loggetto esistente potrebbe essere riutilizzato, invece di creare un nuovo oggetto. A differenza di un costruttore, i metodi di fabbrica possono avere nomi diversi e più descrittivi (ad es. Color.make_RGB_color(float red, float green, float blue) e Color.make_HSB_color(float hue, float saturation, float brightness)

Il client è totalmente disaccoppiato dai dettagli di implementazione delle classi derivate. La creazione polimorfica è ora possibile.

Esempio

Il metodo Factory definisce uninterfaccia per la creazione di oggetti, ma lascia che le sottoclassi decidano quali classi istanziare. Injection mouldingpresses dimostrano Questo modello. I produttori di giocattoli di plastica elaborano la polvere per stampaggio di plastica e iniettano la plastica in stampi delle forme desiderate. La classe del giocattolo (macchina, action figure, ecc.) È determinata dallo stampo.

Elenco di controllo

  1. Se disponi di una gerarchia di ereditarietà che esercita il polimorfismo, prendi in considerazione laggiunta di una capacità di creazione polimorfica definendo un metodo factory static nella classe di base.
  2. Progettare gli argomenti in base al metodo factory. Quali qualità o caratteristiche sono necessarie e sufficienti per identificare la classe derivata corretta da istanziare?
  3. Considerare la progettazione di un “pool di oggetti” interno che consentirà di riutilizzare gli oggetti invece di crearli da zero.
  4. Considera rendendo tutti i costruttori private o protected.

Regole pratiche

  • Le classi Factory astratte sono spesso implementate con i metodi Factory, ma possono essere implementate utilizzando Prototype.
  • I metodi Factory vengono solitamente chiamati allinterno dei metodi Template.
  • Metodo Factory: creazione tramite ereditarietà . Prototipo: creazione tramite delega.
  • Spesso, i progetti iniziano utilizzando il Metodo Factory (meno complicati, più personalizzabili, le sottoclassi proliferano) e si evolvono verso AbstractFactory, Prototype o Builder (più flessibile, più complesso) man mano che il progettista scopre dove più è necessaria flessibilità.
  • Il prototipo non richiede la creazione di sottoclassi, ma richiede unoperazione di inizializzazione. Factory Method richiede la creazione di sottoclassi, ma non “trequire Initialize.
  • Il vantaggio di un metodo Factory è che può restituire la stessa istanza più volte, o può restituire una sottoclasse piuttosto che un oggetto di quel tipo esatto.
  • Alcuni sostenitori del Metodo Factory consigliano che per una questione di progettazione linguistica (o in caso contrario, per una questione di stile ) assolutamente tutti i costruttori dovrebbero essere privati o protetti. Non sono affari di nessuno se una classe produce un nuovo oggetto o ne ricicla uno vecchio.
  • Loperatore new considerato dannoso. Cè una differenza tra la richiesta di un oggetto e la creazione di uno. Loperatore new crea sempre un oggetto e non riesce a incapsulare la creazione delloggetto.Un metodo di fabbrica impone tale incapsulamento e consente di richiedere un oggetto senza un accoppiamento inestricabile con latto di creazione.

Supporta il nostro sito web gratuito e possiedi leBook!

  • 22 design pattern e 8 principi spiegati in profondità
  • 406 pagine ben strutturate, facili da leggere e prive di gergo
  • 228 illustrazioni e diagrammi chiari e utili
  • Un archivio con esempi di codice in 4 lingue
  • Tutti i dispositivi supportati: formati EPUB / MOBI / PDF

Ulteriori informazioni …

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *