logo

Fabriksmetode mønster

Et Factory Pattern eller Factory Method Pattern siger det bare definere en grænseflade eller abstrakt klasse til at skabe et objekt, men lad underklasserne bestemme, hvilken klasse der skal instansieres. Med andre ord er underklasser ansvarlige for at skabe forekomsten af ​​klassen.

Factory Method Pattern er også kendt som Virtuel konstruktør.

Fordel ved Factory Design Pattern

  • Factory Method Pattern giver underklasserne mulighed for at vælge den type objekter, der skal oprettes.
  • Det fremmer løs kobling ved at eliminere behovet for at binde applikationsspecifikke klasser ind i koden. Det betyder, at koden udelukkende interagerer med den resulterende grænseflade eller abstrakt klasse, så den vil fungere med alle klasser, der implementerer denne grænseflade, eller som udvider den abstrakte klasse.

Brug af fabriksdesignmønster

  • Når en klasse ikke ved, hvilke underklasser der skal oprettes
  • Når en klasse ønsker, at dens underklasser angiver de objekter, der skal oprettes.
  • Når de overordnede klasser vælger oprettelsen af ​​objekter til dens underklasser.

UML for Factory Method Pattern

  • Vi skal lave en Plan abstrakt klasse og konkrete klasser, der udvider Plan abstrakt klasse. En fabriksklasse GetPlanFactory er defineret som et næste trin.
  • GenerateBill-klassen vil bruge GetPlanFactory til at få et Plan-objekt. Det vil videregive information (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) til GetPalnFactory for at få den type objekt, den har brug for.

Beregn elregning: Et eksempel på en fabriksmetode fra den virkelige verden

Trin 1: Opret 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. 

Trin 2: Opret de konkrete klasser, der udvider 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. 

Trin 3: Opret en GetPlanFactory for at generere objekt af konkrete klasser baseret på givet 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. 

Trin 4: Generer regning ved at bruge GetPlanFactory til at få objektet til konkrete klasser ved at videregive en information så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. 

download dette elregningseksempel

Produktion