logo

Gamyklos metodo modelis

Gamyklos modelis arba gamyklinio metodo modelis sako, kad tiesiog apibrėžkite sąsają arba abstrakčią klasę objektui sukurti, bet leiskite poklasiams nuspręsti, kurią klasę sukurti. Kitaip tariant, poklasiai yra atsakingi už klasės egzemplioriaus sukūrimą.

Gamyklos metodo modelis taip pat žinomas kaip Virtualus konstruktorius.

Gamyklinio dizaino modelio pranašumas

  • Gamyklos metodo modelis leidžia poklasiams pasirinkti kuriamų objektų tipą.
  • Tai skatina laisvas sujungimas pašalinant poreikį į kodą susieti konkrečioms programoms skirtas klases. Tai reiškia, kad kodas sąveikauja tik su gaunama sąsaja arba abstrakčia klase, todėl jis veiks su visomis klasėmis, kurios įgyvendina tą sąsają arba išplečia tą abstrakčią klasę.

Gamyklinio dizaino modelio naudojimas

  • Kai klasė nežino, kokius poklasius reikės sukurti
  • Kai klasė nori, kad jos poklasiai nurodytų objektus, kuriuos reikia sukurti.
  • Kai pagrindinės klasės pasirenka objektų kūrimą savo poklasiams.

UML gamyklinio metodo modeliui

  • Mes ketiname sukurti abstrakčiąją klasę Plan ir konkrečias klases, kurios praplečia abstrakčiąją klasę. Gamyklos klasė GetPlanFactory apibrėžiama kaip kitas žingsnis.
  • „GenerateBill“ klasė naudos „GetPlanFactory“, kad gautų plano objektą. Jis perduos informaciją (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) GetPalnFactory, kad gautų reikiamo tipo objektą.

Apskaičiuokite sąskaitą už elektrą: realus gamyklinio metodo pavyzdys

1 žingsnis: Sukurkite plano abstrakčią klasę.

 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. 

2 žingsnis: Sukurkite konkrečias klases, kurios praplečia plano abstrakčią klasę.

 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. 

3 veiksmas: Sukurkite „GetPlanFactory“, kad sugeneruotumėte konkrečių klasių objektą pagal pateiktą informaciją.

 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. 

4 veiksmas: Sugeneruokite sąskaitą naudodami GetPlanFactory, kad gautumėte konkrečių klasių objektą, pateikdami tokią informaciją kaip plano tipas DOMESTICPLAN arba COMMERCIALPLAN arba 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. 

atsisiųskite šį sąskaitos už elektrą pavyzdį

Išvestis