logo

Fabrieksmethodepatroon

Een Factory Pattern of Factory Method Pattern zegt dat precies definieer een interface of abstracte klasse voor het maken van een object, maar laat de subklassen beslissen welke klasse moet worden geïnstantieerd. Met andere woorden, subklassen zijn verantwoordelijk voor het creëren van de instantie van de klasse.

Het Factory Method Pattern wordt ook wel Virtuele constructeur.

Voordeel van fabrieksontwerppatroon

  • Met Factory Method Pattern kunnen de subklassen het type object kiezen dat ze willen maken.
  • Het bevordert de losse koppeling door de noodzaak te elimineren om applicatiespecifieke klassen in de code te binden. Dat betekent dat de code uitsluitend communiceert met de resulterende interface of abstracte klasse, zodat deze zal werken met alle klassen die die interface implementeren of die die abstracte klasse uitbreiden.

Gebruik van fabrieksontwerppatroon

  • Wanneer een klasse niet weet welke subklassen moeten worden gemaakt
  • Wanneer een klasse wil dat zijn subklassen de objecten specificeren die moeten worden gemaakt.
  • Wanneer de bovenliggende klassen kiezen voor het maken van objecten voor hun subklassen.

UML voor fabrieksmethodepatroon

  • We gaan een abstracte klasse Plan en concrete klassen maken die de abstracte klasse Plan uitbreiden. Als volgende stap wordt een fabrieksklasse GetPlanFactory gedefinieerd.
  • De klasse GenerateBill gebruikt GetPlanFactory om een ​​Plan-object op te halen. Het zal informatie (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) doorgeven aan GetPalnFactory om het type object te verkrijgen dat het nodig heeft.

Bereken de elektriciteitsrekening: een realistisch voorbeeld van de fabrieksmethode

Stap 1: Maak een abstracte klasse 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. 

Stap 2: Creëer de concrete klassen die de abstracte klasse Plan uitbreiden.

 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. 

Stap 3: Maak een GetPlanFactory om objecten van concrete klassen te genereren op basis van gegeven informatie.

 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. 

Stap 4: Genereer Bill met behulp van de GetPlanFactory om het object van concrete klassen op te halen door informatie door te geven, zoals het type plan DOMESTICPLAN of COMMERCIALPLAN of INSTITUTTIONALPLAN.

 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. 

download dit voorbeeld elektriciteitsrekening

Uitvoer