GeeksforGeeks (Italiano)
È un modello di progettazione di creazione che parla della creazione di un oggetto. Il modello di progettazione di fabbrica dice che definisce un’interfaccia (un’interfaccia java o una classe astratta) e lascia che le sottoclassi decidano quale oggetto istanziare. Il metodo factory nell’interfaccia consente a una classe di rinviare l’istanza a una o più sottoclassi concrete. Poiché questo design pattern parla di istanziazione di un oggetto e quindi rientra nella categoria del design pattern creazionale. Se notiamo il nome metodo Factory, significa che esiste un metodo che è una fabbrica, e in generale le fabbriche sono coinvolte con cose creazionali e qui con questo viene creato un oggetto. È uno dei modi migliori per creare un oggetto in cui la logica di creazione dell’oggetto è nascosta al client. Ora diamo un’occhiata all’implementazione.
Implementazione:
1. Definisci un metodo factory all’interno di un’interfaccia.
2. Lascia che la sottoclasse implementi il metodo factory di cui sopra e decida quale oggetto creare.
In Java i costruttori non sono polimorfici, ma consentendo alla sottoclasse di creare un oggetto, stiamo aggiungendo un comportamento polimorfico all’istanza. In breve, stiamo cercando di ottenere lo pseudo polimorfismo lasciando che la sottoclasse decida cosa creare, e quindi questo metodo Factory è anche chiamato
costruttore virtuale. Proviamo a implementarlo con un problema in tempo reale e qualche esercizio di codifica.
Dichiarazione del problema:
considera che vogliamo implementare un servizio di notifica tramite e-mail, SMS e notifica push. Proviamo a implementarlo con l’aiuto del modello di progettazione del metodo di fabbrica. Per prima cosa progetteremo un diagramma delle classi UML per questo.
Nel diagramma delle classi sopra abbiamo un’interfaccia chiamata Notification, e tre classi concrete stanno implementando l’interfaccia Notification. Una NotificationFactory di classe factory viene creata per ottenere un oggetto Notification. Passiamo ora alla codifica.
Crea interfaccia di notifica
public
interface
Notification {
void
notifyUser();
}
Nota – L’interfaccia sopra potrebbe essere creata anche come classe astratta.
Crea tutte le classi di implementazione
SMSNotification.java
public
class
SMSNotification
implements
Notification {
@Override
public
void
notifyUser()
{
System.out.println(
"Sending an SMS notification"
);
}
}
EmailNotification.java
public
class
EmailNotification
implements
Notification {
@Override
public
void
notifyUser()
{
System.out.println(
"Sending an e-mail notification"
);
}
}
PushNotification.java
public
class
PushNotification
implements
Notification {
@Override
public
void
notifyUser()
{
System.out.println(
"Sending a push notification"
);
}
}
Crea una classe factory NotificationFactory.java per istanziare la classe concreta.
Ora usiamo la classe factory per creare e ottenere un oggetto di classe concreta passando alcune informazioni.
public
class
NotificationService {
public
static
void
main(String args)
{
NotificationFactory notificationFactory =
new
NotificationFactory();
Notification notification = notificationFactory.createNotification(
"SMS"
);
notification.notifyUser();
}
}
Output : Sending an SMS notification
Esempi in tempo reale
Questo modello di progettazione è stato ampiamente utilizzato in JDK, ad esempio
1. Il metodo getInstance () di java.util.Calendar, NumberFormat e ResourceBundle utilizza il modello di progettazione del metodo di fabbrica.
2. Tutte le classi wrapper come Integer, Boolean ecc. In Java utilizzano questo modello per valutare i valori utilizzando il metodo valueOf ().
3. java.nio.charset.Charset.forName (), java.sql.DriverManager # getConnection (), java.net.URL.openConnection (), java.lang.Class.newInstance (), java.lang.Class.forName () sono alcuni degli esempi in cui è stato utilizzato il design pattern del metodo factory.
Conclusione
Finora abbiamo imparato cos’è il design pattern del metodo Factory e come implementarlo. Credo che ora abbiamo una buona comprensione dei vantaggi di questo meccanismo di progettazione.