GeeksforGeeks (Nederlands)
Het is een creatief ontwerppatroon dat spreekt over het maken van een object. Het fabrieksontwerppatroon zegt dat het een interface definieert (een Java-interface of een abstracte klasse) en de subklassen laat beslissen welk object wordt geïnstantieerd. Met de fabrieksmethode in de interface kan een klasse de instantiatie uitstellen naar een of meer concrete subklassen. Omdat deze ontwerppatronen spreken over concretisering van een object, valt het onder de categorie van creatief ontwerppatroon. Als we de naam Factory-methode opmerken, betekent dit dat er een methode is die een fabriek is, en in het algemeen zijn fabrieken betrokken bij creaties en hier wordt hiermee een object gemaakt. Het is een van de beste manieren om een object te maken waarbij de logica voor het maken van objecten voor de klant verborgen is. Laten we nu eens kijken naar de implementatie.
Implementatie:
1. Definieer een fabrieksmethode in een interface.
2. Laat de subklasse de bovenstaande fabrieksmethode implementeren en beslissen welk object er moet worden gemaakt.
In Java zijn constructors niet polymorf, maar door subklasse toe te staan een object te creëren, voegen we polymorf gedrag toe aan de instantiatie. Kortom, we proberen pseudo-polymorfisme te bereiken door de subklasse te laten beslissen wat er gemaakt moet worden, en daarom wordt deze Factory-methode ook wel
Virtuele constructor genoemd. Laten we proberen het te implementeren met een real-time probleem en wat programmeeroefening.
Probleemstelling:
Bedenk dat we een meldingsservice willen implementeren via e-mail, sms en pushmeldingen. Laten we proberen dit te implementeren met behulp van het ontwerppatroon van de fabrieksmethode. Hiervoor gaan we eerst een UML-klassendiagram ontwerpen.
In het bovenstaande klassendiagram hebben we een interface genaamd Notification, en drie concrete klassen implementeren de Notification-interface. Er wordt een fabrieksklasse NotificationFactory gemaakt om een Notification-object op te halen. Laten we nu naar de codering gaan.
Maak een meldingsinterface
public
interface
Notification {
void
notifyUser();
}
Opmerking – Bovenstaande interface kan ook als een abstracte klasse worden gemaakt.
Maak alle implementatieklassen
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"
);
}
}
Maak een fabrieksklasse NotificationFactory.java om de concrete klasse te instantiëren.
Laten we nu de fabrieksklasse gebruiken om een object van concrete klasse te maken en te krijgen door wat informatie door te geven.
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
Real-time voorbeelden
Dit ontwerppatroon wordt veel gebruikt in JDK, zoals
1. De methode getInstance () van java.util.Calendar, NumberFormat en ResourceBundle gebruikt het ontwerppatroon van de fabrieksmethode.
2. Alle wrapper-klassen zoals Integer, Boolean enz. In Java gebruiken dit patroon om de waarden te evalueren met de methode valueOf ().
3. java.nio.charset.Charset.forName (), java.sql.DriverManager # getConnection (), java.net.URL.openConnection (), java.lang.Class.newInstance (), java.lang.Class.forName () zijn enkele van de voorbeelden waarin het ontwerppatroon van de fabrieksmethode is gebruikt.
Conclusie
Tot dusver hebben we geleerd wat het ontwerppatroon van de fabrieksmethode is en hoe het te implementeren. Ik denk dat we nu een redelijk begrip hebben van het voordeel van dit ontwerpmechanisme.