GeeksforGeeks (Français)
Il s’agit d’un modèle de conception de création qui parle de la création d’un objet. Le modèle de conception d’usine dit que définir une interface (une interface java ou une classe abstraite) et laisser les sous-classes décider quel objet instancier. La méthode factory de l’interface permet à une classe de reporter l’instanciation à une ou plusieurs sous-classes concrètes. Puisque ces modèles de conception parlent d’instanciation d’un objet et qu’il entre donc dans la catégorie des modèles de conception créative. Si nous remarquons le nom de la méthode Factory, cela signifie qu’il existe une méthode qui est une usine, et en général les usines sont impliquées dans la création et ici avec cela un objet est en cours de création. C’est l’un des meilleurs moyens de créer un objet dans lequel la logique de création d’objet est masquée pour le client. Examinons maintenant la mise en œuvre.
Mise en œuvre:
1. Définissez une méthode de fabrique dans une interface.
2. Laissez la sous-classe implémenter la méthode de fabrique ci-dessus et décidez quel objet créer.
En Java, les constructeurs ne sont pas polymorphes, mais en permettant à la sous-classe de créer un objet, nous ajoutons un comportement polymorphe à l’instanciation. En bref, nous essayons d’atteindre le pseudo polymorphisme en laissant la sous-classe décider quoi créer, et donc cette méthode Factory est également appelée
Constructeur virtuel. Essayons de le mettre en œuvre avec un problème en temps réel et un exercice de codage.
Énoncé du problème:
Considérez que nous voulons implémenter un service de notification par e-mail, SMS et notification push. Essayons de mettre en œuvre cela à l’aide du modèle de conception de méthode d’usine. Nous allons d’abord concevoir un diagramme de classes UML pour cela.
Dans le diagramme de classes ci-dessus, nous avons une interface appelée Notification, et trois classes concrètes implémentent l’interface Notification. Une classe d’usine NotificationFactory est créée pour obtenir un objet Notification. Passons maintenant au codage.
Créer une interface de notification
public
interface
Notification {
void
notifyUser();
}
Remarque – L’interface ci-dessus pourrait également être créée en tant que classe abstraite.
Créez toutes les classes d’implémentation
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"
);
}
}
Créez une classe d’usine NotificationFactory.java pour instancier une classe concrète.
Utilisons maintenant la classe d’usine pour créer et obtenir un objet de classe concrète en passant des informations.
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
Exemples en temps réel
Ce modèle de conception a été largement utilisé dans JDK, tel que
1. getInstance () de java.util.Calendar, NumberFormat et ResourceBundle utilise un modèle de conception de méthode d’usine.
2. Toutes les classes wrapper comme Integer, Boolean, etc. en Java utilisent ce modèle pour évaluer les valeurs à l’aide de la méthode valueOf ().
3. java.nio.charset.Charset.forName (), java.sql.DriverManager # getConnection (), java.net.URL.openConnection (), java.lang.Class.newInstance (), java.lang.Class.forName () sont quelques-uns des autres exemples d’utilisation d’un modèle de conception de méthode d’usine.
Conclusion
Jusqu’à présent, nous avons appris ce qu’est le modèle de conception de méthode Factory et comment l’implémenter. Je crois que nous avons maintenant une bonne compréhension de l’avantage de ce mécanisme de conception.