logo

Uzorak tvorničke metode

Tvornički obrazac ili obrazac tvorničke metode kaže to samo definirajte sučelje ili apstraktnu klasu za stvaranje objekta, ali pustite podklase da odluče koju će klasu instancirati. Drugim riječima, podklase su odgovorne za stvaranje instance klase.

funkcije niza u Javi

Uzorak tvorničke metode poznat je i kao Virtualni konstruktor.

Prednost tvorničkog uzorka dizajna

  • Factory Method Pattern dopušta potklasama odabir vrste objekata za stvaranje.
  • Promiče labava spojka eliminiranjem potrebe za vezanjem klasa specifičnih za aplikaciju u kod. To znači da kod djeluje isključivo s rezultirajućim sučeljem ili apstraktnom klasom, tako da će raditi sa svim klasama koje implementiraju to sučelje ili koje proširuju tu apstraktnu klasu.

Upotreba uzorka tvorničkog dizajna

  • Kada klasa ne zna koje će podklase morati stvoriti
  • Kada klasa želi da njezine podklase specificiraju objekte koji će se kreirati.
  • Kada roditeljske klase odaberu stvaranje objekata za svoje podklase.

UML za obrazac tvorničke metode

  • Napravit ćemo apstraktnu klasu Plan i konkretne klase koje proširuju apstraktnu klasu Plan. Tvornička klasa GetPlanFactory definirana je kao sljedeći korak.
  • Klasa GenerateBill koristit će GetPlanFactory za dobivanje objekta Plana. Proslijedit će informacije (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) GetPalnFactoryju da dobije vrstu objekta koja mu je potrebna.

Izračunajte račun za struju: primjer tvorničke metode iz stvarnog svijeta

Korak 1: Stvorite apstraktnu klasu Plan.

 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. 

Korak 2: Stvorite konkretne klase koje proširuju apstraktnu klasu Plan.

 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. 

Korak 3: Napravite GetPlanFactory za generiranje objekta konkretnih klasa na temelju danih informacija..

 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. 

Korak 4: Generirajte račun korištenjem GetPlanFactory za dobivanje objekta konkretnih klasa prosljeđivanjem informacija kao što je vrsta plana DOMESTICPLAN ili COMMERCIALPLAN ili 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. 

preuzmite ovaj Primjer računa za struju

Izlaz