GeeksforGeeks (Română)
Este un model de proiectare de creație care vorbește despre crearea unui obiect. Modelul de proiectare din fabrică spune că definește o interfață (O interfață java sau o clasă abstractă) și permite subclaselor să decidă ce obiect să instanțeze. Metoda din fabrică din interfață permite unei clase să amâne instanțierea la una sau mai multe subclase concrete. Întrucât aceste modele de proiectare vorbesc despre instanțierea unui obiect și astfel se încadrează în categoria modelului de design creațional. Dacă observăm denumirea de metodă Factory, asta înseamnă că există o metodă care este o fabrică și, în general, fabricile sunt implicate în lucruri de creație și aici cu aceasta se creează un obiect. Este una dintre cele mai bune modalități de a crea un obiect în care logica de creare a obiectelor este ascunsă clientului. Acum să analizăm implementarea.
Implementarea:
1. Definiți o metodă din fabrică în interiorul unei interfețe.
2. Permiteți subclasei să implementeze metoda din fabrică de mai sus și să decidă ce obiect să creați.
În Java constructorii nu sunt polimorfi, dar permițând subclasei să creeze un obiect, adăugăm comportament polimorf instanțierii. Pe scurt, încercăm să realizăm pseudo-polimorfism lăsând subclasa să decidă ce să creeze, și astfel această metodă Factory este numită și ca
constructor virtual. Să încercăm să-l implementăm cu o problemă în timp real și cu un exercițiu de codare.
Declarație de problemă:
Luați în considerare faptul că dorim să implementăm un serviciu de notificare prin e-mail, SMS și notificare push. Să încercăm să implementăm acest lucru cu ajutorul modelului de proiectare a metodelor din fabrică. Mai întâi vom proiecta o diagramă de clasă UML pentru aceasta.
În diagrama de clasă de mai sus avem o interfață numită Notificare și trei clase concrete implementează interfața Notificare. O clasă fabrică NotificationFactory este creată pentru a obține un obiect Notification. Să trecem în codare acum.
Creați o interfață de notificare
public
interface
Notification {
void
notifyUser();
}
Notă – Interfața de mai sus ar putea fi creată și ca o clasă abstractă.
Creați toate clasele de implementare
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ți o clasă din fabrică NotificationFactory.java pentru a crea o clasă concretă.
Acum să folosim clasa din fabrică pentru a crea și a obține un obiect de clasă concretă prin transmiterea unor informații.
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
Exemple în timp real
Acest model de design a fost utilizat pe scară largă în JDK, cum ar fi
1. Metoda getInstance () a java.util.Calendar, NumberFormat și ResourceBundle utilizează modelul de proiectare a metodei din fabrică.
2. Toate clasele de împachetare, cum ar fi Integer, Boolean etc, în Java utilizează acest model pentru a evalua valorile folosind metoda valueOf ().
3. java.nio.charset.Charset.forName (), java.sql.DriverManager # getConnection (), java.net.URL.openConnection (), java.lang.Class.newInstance (), java.lang.Class.forName () sunt câteva dintre exemplele în care a fost utilizat modelul de proiectare a metodei din fabrică.
Concluzie
Până acum am aflat ce este modelul de proiectare a metodei din fabrică și cum să-l implementăm. Cred că acum înțelegem corect avantajul acestui mecanism de proiectare.