Le modèle "Factory" peut être utilisé dans les cas où le processus de création d'une instance d'objet d'une classe est trop compliqué ou doit être séparé.
Dans ce modèle, il y a une interface qui est implémentée par des sous-classes qui sont utilisées par une classe d'usine (dans cet exemple : "TruckFactory"). Si vous voulez créer une nouvelle instance, vous devez appeler une fonction (dans cet exemple, "TruckFactory") : "getTruck(String truckManifacturer)" dans l'instance de votre classe d'usine, qui vous retournera votre nouvelle instance d'objet. La nouvelle instance d'objet sera référencée par la super classe qui est l'interface.
Un appel à la création d'une instance d'objet se présente comme suit:
MyFactory myFactory = new MyFactory();
MyObjectSuperClass obj1 = myFactory.getFactoryInstance("MyObjectSubClass");
Vous passez le nom de votre classe dans la méthode de la classe d'usine, au lieu de le créer par la commande "new".
UML diagram
La structure de l'application qui sera créée pour ce tutoriel sur le modèle "Factory". Un camion a la fonction "start", qui est implémentée différemment par les fabricants de camions.
La classe d'usine "TruckFactory" est utilisée pour obtenir de nouvelles instances Truck pour un certain constructeur de camions.
Example
Il s'agit d'un exemple d'application qui crée et gère différents fabricants de camions.
public interface Truck {
void start();
}
public class Volvo implements Truck {
@Override
public void start() {
System.out.println("Volvo truck was started.");
}
}
public class Man implements Truck {
@Override
public void start() {
System.out.println("Man truck was started.");
}
}
public class TruckFactory {
public Truck getTruck(String truckManufacturer) {
if(truckManufacturer != null) {
if(truckManufacturer.equalsIgnoreCase("Volvo")) {
return new Volvo();
} else if (truckManufacturer.equalsIgnoreCase("Man")) {
return new Man();
}
}
return null;
}
}
public class TruckFactoryPattern {
public static void main(String[] args) {
TruckFactory truckFactory = new TruckFactory();
Truck manObj = truckFactory.getTruck("Man");
Truck volvoObj = truckFactory.getTruck("Volvo");
manObj.start();
volvoObj.start();
}
}
Output:
Man truck was started.
Volvo truck was started.
Autres types du modèle "Factory" (usine)
Méthode Factory
Cette méthode est utilisée pour créer une instance de la classe à partir de laquelle cette méthode elle-même est appelée de. Une méthode d'usine est toujours une méthode abstraite.
Abstract factory
Il s'agit d'une extension de la mise en œuvre du modèle d'usine et elle est utilisée pour créer plusieurs types d'objets qui ont toujours une relation entre eux.
Il existe une classe d'usine abstraite qui est étendue par des classes d'usine concrètes (sous-classe). Les classes d'usine concrètes implémentent la ou les méthodes qui sont définies dans la super classe (la classe d'usine abstraite).
Ces classes d'usine concrètes créent des instances de classes concrètes. Les classes concrètes contiennent les méthodes implémentées de leurs super classes abstraites respectives.
Ce tutoriel en tant qu'application
Github repos: https://github.com/a-dridi/factory-TruckFactoryDemo