logo

Tehdasmenetelmämalli

Factory Pattern tai Factory Method Pattern sanoo, että juuri määrittele rajapinta tai abstrakti luokka objektin luomista varten, mutta anna alaluokkien päättää, mikä luokka instantioidaan. Toisin sanoen alaluokat ovat vastuussa luokan esiintymän luomisesta.

Factory Method Pattern tunnetaan myös nimellä Virtuaalinen rakentaja.

c#-kytkin

Tehdassuunnittelumallin etu

  • Factory Method Pattern sallii alaluokkien valita luotavien objektien tyypin.
  • Se edistää löysä kytkentä poistamalla tarpeen sitoa sovelluskohtaisia ​​luokkia koodiin. Tämä tarkoittaa, että koodi on vuorovaikutuksessa vain tuloksena olevan käyttöliittymän tai abstraktin luokan kanssa, joten se toimii kaikkien luokkien kanssa, jotka toteuttavat kyseisen rajapinnan tai laajentavat sitä abstraktia luokkaa.

Tehdassuunnittelumallin käyttö

  • Kun luokka ei tiedä, mitä alaluokkia on luotava
  • Kun luokka haluaa, että sen alaluokat määrittävät luotavat objektit.
  • Kun pääluokat valitsevat objektien luomisen alaluokkiinsa.

UML Factory Method Patternille

  • Aiomme luoda Plan abstraktin luokan ja konkreettisia luokkia, jotka laajentavat Plan abstraktin luokkaa. Tehdasluokka GetPlanFactory on määritelty seuraavaksi askeleeksi.
  • GenerateBill-luokka käyttää GetPlanFactorya Plan-objektin hankkimiseen. Se välittää tiedot (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) GetPalnFactorylle saadakseen tarvitsemansa objektityypin.

Laske sähkölasku: todellinen esimerkki tehdasmenetelmästä

Vaihe 1: Luo suunnitelman abstrakti luokka.

 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. 

Vaihe 2: Luo konkreettiset luokat, jotka laajentavat Plan abstraktin luokan.

 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. 

Vaihe 3: Luo GetPlanFactory konkreettisten luokkien objektin luomiseksi annettujen tietojen perusteella.

 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. 

Vaihe 4: Luo lasku käyttämällä GetPlanFactorya saadaksesi konkreettisten luokkien kohteen välittämällä tiedot, kuten suunnitelman tyyppi DOMESTICPLAN tai COMMERCIALPLAN tai 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. 

lataa tämä sähkölaskuesimerkki

Lähtö