Un modèle d'usine ou un modèle de méthode d'usine indique que définissez une interface ou une classe abstraite pour créer un objet mais laissez les sous-classes décider quelle classe instancier. En d’autres termes, les sous-classes sont chargées de créer l’instance de la classe.
Le modèle de méthode d'usine est également connu sous le nom de Constructeur Virtuel.
applications de cloud computing
Avantage du modèle de conception d'usine
- Factory Method Pattern permet aux sous-classes de choisir le type d’objets à créer.
- Il favorise la couplage lâche en éliminant le besoin de lier des classes spécifiques à l'application dans le code. Cela signifie que le code interagit uniquement avec l'interface ou la classe abstraite résultante, de sorte qu'il fonctionnera avec toutes les classes qui implémentent cette interface ou qui étendent cette classe abstraite.
Utilisation du modèle de conception d'usine
- Lorsqu'une classe ne sait pas quelles sous-classes devront créer
- Lorsqu'une classe souhaite que ses sous-classes précisent les objets à créer.
- Lorsque les classes parents choisissent la création d'objets pour ses sous-classes.
UML pour le modèle de méthode d'usine
- Nous allons créer une classe abstraite Plan et des classes concrètes qui étendent la classe abstraite Plan. Une classe d'usine GetPlanFactory est définie comme étape suivante.
- La classe GenerateBill utilisera GetPlanFactory pour obtenir un objet Plan. Il transmettra des informations (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) à GetPalnFactory pour obtenir le type d'objet dont il a besoin.
Calculer la facture d'électricité : un exemple concret de méthode d'usine
Étape 1: Créez une classe abstraite Plan.
import java.io.*; abstract class Plan{ protected double rate; abstract void getRate(); public void calculateBill(int units){ System.out.println(units*rate); } }//end of Plan class.
Étape 2: Créez les classes concrètes qui étendent la classe abstraite Plan.
class DomesticPlan extends Plan{ //@override public void getRate(){ rate=3.50; } }//end of DomesticPlan class.
class CommercialPlan extends Plan{ //@override public void getRate(){ rate=7.50; } }//end of CommercialPlan class.
class InstitutionalPlan extends Plan{ //@override public void getRate(){ rate=5.50; } }//end of InstitutionalPlan class.
Étape 3: Créez un GetPlanFactory pour générer un objet de classes concrètes basées sur des informations données.
Linux renommer le répertoire
class GetPlanFactory{ //use getPlan method to get object of type Plan public Plan getPlan(String planType){ if(planType == null){ return null; } if(planType.equalsIgnoreCase('DOMESTICPLAN')) { return new DomesticPlan(); } else if(planType.equalsIgnoreCase('COMMERCIALPLAN')){ return new CommercialPlan(); } else if(planType.equalsIgnoreCase('INSTITUTIONALPLAN')) { return new InstitutionalPlan(); } return null; } }//end of GetPlanFactory class.
Étape 4: Générez Bill en utilisant GetPlanFactory pour obtenir l'objet de classes concrètes en transmettant une information telle que le type de plan DOMESTICPLAN ou COMMERCIALPLAN ou INSTITUTIONALPLAN.
import java.io.*; class GenerateBill{ public static void main(String args[])throws IOException{ GetPlanFactory planFactory = new GetPlanFactory(); System.out.print('Enter the name of plan for which the bill will be generated: '); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String planName=br.readLine(); System.out.print('Enter the number of units for bill will be calculated: '); int units=Integer.parseInt(br.readLine()); Plan p = planFactory.getPlan(planName); //call getRate() method and calculateBill()method of DomesticPaln. System.out.print('Bill amount for '+planName+' of '+units+' units is: '); p.getRate(); p.calculateBill(units); } }//end of GenerateBill class.
téléchargez cet exemple de facture d'électricité