• 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