Tovarniški vzorec ali vzorec tovarniške metode pravi samo to definirajte vmesnik ali abstraktni razred za ustvarjanje predmeta, vendar naj se podrazredi odločijo, kateri razred bodo instancirali. Z drugimi besedami, podrazredi so odgovorni za ustvarjanje primerka razreda.
Vzorec tovarniške metode je znan tudi kot Virtualni konstruktor.
bah če drugače
Prednost tovarniškega vzorca oblikovanja
- Vzorec tovarniške metode omogoča podrazredom, da izberejo vrsto objektov za ustvarjanje.
- Spodbuja ohlapna spojka z odpravo potrebe po vezavi razredov, specifičnih za aplikacijo, v kodo. To pomeni, da koda sodeluje samo z nastalim vmesnikom ali abstraktnim razredom, tako da bo delovala z vsemi razredi, ki izvajajo ta vmesnik ali razširjajo ta abstraktni razred.
Uporaba tovarniškega oblikovalskega vzorca
- Ko razred ne ve, katere podrazrede bo treba ustvariti
- Ko razred želi, da njegovi podrazredi določajo objekte, ki jih je treba ustvariti.
- Ko nadrejeni razredi izberejo ustvarjanje predmetov za svoje podrazrede.
UML za vzorec tovarniške metode
- Ustvarili bomo abstraktni razred Plan in konkretne razrede, ki razširjajo abstraktni razred Plan. Kot naslednji korak je definiran tovarniški razred GetPlanFactory.
- Razred GenerateBill bo uporabil GetPlanFactory za pridobitev objekta Plan. Podatke (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) bo posredoval GetPalnFactory, da dobi vrsto predmeta, ki ga potrebuje.
Izračunajte račun za elektriko: resnični primer tovarniške metode
Korak 1: Ustvarite abstraktni razred 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.
2. korak: Ustvarite konkretne razrede, ki razširjajo abstraktni razred 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.
3. korak: Ustvarite GetPlanFactory za ustvarjanje objekta konkretnih razredov na podlagi podanih 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. korak: Ustvarite račun z uporabo GetPlanFactory, da pridobite objekt konkretnih razredov s posredovanjem informacij, kot je vrsta načrta DOMESTICPLAN ali COMMERCIALPLAN ali 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.
prenesite ta primer računa za elektriko