logo

Fabriksmetodmönster

Ett Factory Pattern eller Factory Method Pattern säger att bara definiera ett gränssnitt eller en abstrakt klass för att skapa ett objekt men låt underklasserna bestämma vilken klass som ska instansieras. Med andra ord är underklasser ansvariga för att skapa instansen av klassen.

Factory Method Pattern är också känt som Virtuell konstruktör.

Fördel med Factory Design Pattern

  • Factory Method Pattern låter underklasserna välja vilken typ av objekt som ska skapas.
  • Det främjar lös koppling genom att eliminera behovet av att binda applikationsspecifika klasser i koden. Det betyder att koden enbart interagerar med det resulterande gränssnittet eller den abstrakta klassen, så att den fungerar med alla klasser som implementerar det gränssnittet eller som utökar den abstrakta klassen.

Användning av Factory Design Pattern

  • När en klass inte vet vilka underklasser som kommer att krävas för att skapa
  • När en klass vill att dess underklasser specificerar objekten som ska skapas.
  • När de överordnade klasserna väljer att skapa objekt till dess underklasser.

UML för Factory Method Pattern

  • Vi kommer att skapa en Plan abstrakt klass och konkreta klasser som utökar Plan abstrakt klass. En fabriksklass GetPlanFactory definieras som ett nästa steg.
  • GenerateBill-klassen kommer att använda GetPlanFactory för att få ett Plan-objekt. Den kommer att skicka information (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) till GetPalnFactory för att få den typ av objekt den behöver.

Beräkna elräkningen: ett verkligt exempel på fabriksmetod

Steg 1: Skapa en Plan abstrakt klass.

 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. 

Steg 2: Skapa de konkreta klasserna som utökar Plan abstrakt klass.

 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. 

Steg 3: Skapa en GetPlanFactory för att generera objekt av konkreta klasser baserat på given information.

 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. 

Steg 4: Generera räkning genom att använda GetPlanFactory för att få föremål för konkreta klasser genom att skicka en information som typ av plan DOMESTICPLAN eller COMMERCIALPLAN eller 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. 

ladda ner den här elräkningen Exempel

Produktion