English English

Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/ard-site/templates/ardsite/library/Designer/Content/SingleArticle.php on line 198

Java Pattern Factory - Encapsuler la création d'une instance de classe

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

 

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok