- Le patron de méthode de fabrique est un patron de création qui est largement utilisé dans le JDK ainsi que dans les frameworks Spring et Struts.
- Le patron de méthode de fabrique est basé sur une « entrée » et s'applique entre une superclasse et plusieurs sous-classes ; ce patron déplace la responsabilité de la création d'objets vers la classe de fabrique.
- Tout d'abord, apprenons à appliquer le patron de méthode de fabrique en Java et à en comprendre les avantages. De plus, le patron de méthode de fabrique est également largement utilisé dans le JDK.
- La superclasse peut être une interface, une classe abstraite ou une classe parente. Dans cet exemple, nous expliquerons le patron de méthode de fabrique en redéfinissant la méthode toString().
Exemple
package com.journaldev.design.model;
public abstract class Computer {
public abstract String getRAM();
public abstract String getHDD();
public abstract String getCPU();
@Override
public String toString(){
return "RAM= "+this.getRAM()+", HDD="+this.getHDD()+", CPU="+this.getCPU();
}
}
Sous-classes du patron de conception Factory
Supposons que les sous-classes PC et Server implémentent Computer :
Exemple
package com.journaldev.design.model;
public class PC extends Computer {
private String ram;
private String hdd;
private String cpu;
public PC(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
@Override
public String getRAM() {
return this.ram;
}
@Override
public String getHDD() {
return this.hdd;
}
@Override
public String getCPU() {
return this.cpu;
}
}
Server implémente également Computer :
Exemple
package com.journaldev.design.model;
public class Server extends Computer {
private String ram;
private String hdd;
private String cpu;
public Server(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
@Override
public String getRAM() {
return this.ram;
}
@Override
public String getHDD() {
return this.hdd;
}
@Override
public String getCPU() {
return this.cpu;
}
}
Classe Factory
Maintenant que nous avons plusieurs sous-classes et une super-classe, nous pouvons créer la classe Factory :
Exemple
package com.journaldev.design.factory;
import com.journaldev.design.model.Computer;
import com.journaldev.design.model.PC;
import com.journaldev.design.model.Server;
public class ComputerFactory {
public static Computer getComputer(String type, String ram, String hdd, String cpu){
if("PC".equalsIgnoreCase(type)) return new PC(ram, hdd, cpu);
else if("Server".equalsIgnoreCase(type)) return new Server(ram, hdd, cpu);
return null;
}
}
Il est important de souligner que :
- La classe fabrique peut être un singleton, et getComputer peut être static.
- getComputer est une méthode de la classe fabrique, et elle retourne différents objets en fonction des mêmes types de paramètres.

Ensuite, voici un simple programme client de test qui utilise l'implémentation du patron de conception Fabrique ci-dessus.
Exemple
package com.journaldev.design.test;
import com.journaldev.design.abstractfactory.PCFactory;
import com.journaldev.design.abstractfactory.ServerFactory;
import com.journaldev.design.factory.ComputerFactory;
import com.journaldev.design.model.Computer;
public class TestFactory {
public static void main(String[] args) {
Computer pc = ComputerFactory.getComputer("pc","2 GB","500 GB","2.4 GHz");
Computer server = ComputerFactory.getComputer("server","16 GB","1 TB","2.9 GHz");
System.out.println("Configuration PC Factory::"+pc);
System.out.println("Configuration serveur Factory::"+server);
}
}
Sortie :
Factory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHz Factory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz
Avantages du patron de conception Factory
- La programmation vers une interface incarne l'idée de la programmation orientée objet.
- Le travail de création d'objets est transféré à la classe factory.
Exemples du patron de conception Factory dans le JDK
- java.util.Calendar, ResourceBundle et NumberFormat getInstance() utilisent le patron de méthode factory.
- valueOf() dans les classes wrapper, telles que Boolean et Integer, utilise également le patron de méthode factory.
Traduction : https://www.jianshu.com/p/5d52e9ce7358
Original : https://www.journaldev.com/1392/factory-design-pattern-in-java