GeeksforGeeks (Deutsch)
Es handelt sich um ein kreatives Entwurfsmuster, das die Erstellung eines Objekts beschreibt. Das Factory-Design-Muster besagt, dass eine Schnittstelle (eine Java-Schnittstelle oder eine abstrakte Klasse) definiert wird und die Unterklassen entscheiden können, welches Objekt instanziiert werden soll. Mit der Factory-Methode in der Schnittstelle kann eine Klasse die Instanziierung auf eine oder mehrere konkrete Unterklassen verschieben. Da diese Entwurfsmuster über die Instanziierung eines Objekts sprechen, fällt es unter die Kategorie des kreativen Entwurfsmusters. Wenn wir den Namen Factory-Methode bemerken, bedeutet dies, dass es eine Methode gibt, die eine Factory ist, und im Allgemeinen sind Fabriken mit kreativen Dingen beschäftigt, und hier wird ein Objekt erstellt. Dies ist eine der besten Möglichkeiten, ein Objekt zu erstellen, bei dem die Objekterstellungslogik für den Client verborgen ist. Schauen wir uns nun die Implementierung an.
Implementierung:
1. Definieren Sie eine Factory-Methode innerhalb einer Schnittstelle.
2. Lassen Sie die Unterklasse die obige Factory-Methode implementieren und entscheiden, welches Objekt erstellt werden soll.
In Java sind Konstruktoren nicht polymorph, aber indem wir der Unterklasse erlauben, ein Objekt zu erstellen, fügen wir der Instanziierung polymorphes Verhalten hinzu. Kurz gesagt, wir versuchen, Pseudo-Polymorphismus zu erreichen, indem wir die Unterklasse entscheiden lassen, was erstellt werden soll. Daher wird diese Factory-Methode auch als
virtueller Konstruktor bezeichnet. Versuchen wir, es mit einem Echtzeitproblem und einigen Codierungsübungen zu implementieren.
Problemstellung:
Wir möchten einen Benachrichtigungsdienst per E-Mail, SMS und Push-Benachrichtigung implementieren. Versuchen wir, dies mithilfe des Entwurfsmusters für Factory-Methoden zu implementieren. Zunächst werden wir hierfür ein UML-Klassendiagramm entwerfen.
Im obigen Klassendiagramm haben wir eine Schnittstelle namens Notification, und drei konkrete Klassen implementieren die Notification-Schnittstelle. Eine Factory-Klasse NotificationFactory wird erstellt, um ein Notification-Objekt abzurufen. Lassen Sie uns jetzt in die Codierung springen.
Benachrichtigungsschnittstelle erstellen
public
interface
Notification {
void
notifyUser();
}
Hinweis – Die obige Schnittstelle kann auch als abstrakte Klasse erstellt werden.
Erstellen Sie alle Implementierungsklassen
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"
);
}
}
Erstellen Sie eine Factory-Klasse NotificationFactory.java, um eine konkrete Klasse zu instanziieren.
Verwenden wir nun die Factory-Klasse, um ein Objekt der konkreten Klasse zu erstellen und abzurufen, indem wir einige Informationen übergeben.
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
Echtzeitbeispiele
Dieses Entwurfsmuster wurde in JDK häufig verwendet, z. B.
1. Die Methode getInstance () von java.util.Calendar, NumberFormat und ResourceBundle verwendet das Entwurfsmuster der Factory-Methode.
2. Alle Wrapper-Klassen wie Integer, Boolean usw. in Java verwenden dieses Muster, um die Werte mithilfe der valueOf () -Methode auszuwerten.
3. java.nio.charset.Charset.forName (), java.sql.DriverManager # getConnection (), java.net.URL.openConnection (), java.lang.Class.newInstance (), java.lang.Class.forName () sind einige Beispiele, bei denen das Entwurfsmuster für Factory-Methoden verwendet wurde.
Fazit
Bisher haben wir gelernt, was das Entwurfsmuster für Factory-Methoden ist und wie es implementiert wird. Ich glaube, jetzt haben wir ein gutes Verständnis für den Vorteil dieses Entwurfsmechanismus.