Et fabrikkmønster eller fabrikkmetodemønster sier det bare definer et grensesnitt eller en abstrakt klasse for å lage et objekt, men la underklassene bestemme hvilken klasse som skal instansieres. Med andre ord, underklasser er ansvarlige for å lage forekomsten av klassen.
Factory Method Pattern er også kjent som Virtuell konstruktør.
Fordel med Factory Design Pattern
- Factory Method Pattern lar underklassene velge typen objekter som skal lages.
- Det fremmer løs kobling ved å eliminere behovet for å binde applikasjonsspesifikke klasser inn i koden. Det betyr at koden samhandler utelukkende med det resulterende grensesnittet eller den abstrakte klassen, slik at den vil fungere med alle klasser som implementerer det grensesnittet eller som utvider den abstrakte klassen.
Bruk av fabrikkdesignmønster
- Når en klasse ikke vet hvilke underklasser som kreves for å opprette
- Når en klasse ønsker at dens underklasser spesifiserer objektene som skal opprettes.
- Når foreldreklassene velger å lage objekter til underklassene.
UML for Factory Method Pattern
- Vi skal lage en Plan abstrakt klasse og konkrete klasser som utvider Plan abstrakt klasse. En fabrikkklasse GetPlanFactory er definert som et neste trinn.
- GenerateBill-klassen vil bruke GetPlanFactory for å få et Plan-objekt. Den vil sende informasjon (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) til GetPalnFactory for å få den typen objekt den trenger.
Beregn strømregningen: Et eksempel på fabrikkmetoden i den virkelige verden
Trinn 1: Lag en plan abstrakt klasse.
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: Lag de konkrete klassene som utvider Plan abstrakt klasse.
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.
Trinn 3: Lag en GetPlanFactory for å generere objekt av konkrete klasser basert på gitt informasjon.
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.
Trinn 4: Generer regning ved å bruke GetPlanFactory for å få objektet til konkrete klasser ved å sende en informasjon som type 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.
last ned denne strømregningen Eksempel