Un model de fabrică sau un model de metodă de fabrică spune asta definiți o interfață sau o clasă abstractă pentru crearea unui obiect, dar lăsați subclasele să decidă ce clasă să instanțieze. Cu alte cuvinte, subclasele sunt responsabile pentru a crea instanța clasei.
ce este stupul
Modelul metodei din fabrică este cunoscut și ca Constructor virtual.
Avantajul modelului de design al fabricii
- Factory Method Pattern permite subclaselor să aleagă tipul de obiecte de creat.
- Promovează cuplaj slab prin eliminarea necesității de a lega clase specifice aplicației în cod. Aceasta înseamnă că codul interacționează numai cu interfața rezultată sau cu clasa abstractă, astfel încât va funcționa cu orice clasă care implementează acea interfață sau care extinde acea clasă abstractă.
Utilizarea modelului de proiectare a fabricii
- Când o clasă nu știe ce subclase vor fi necesare pentru a crea
- Când o clasă dorește ca subclasele sale să specifice obiectele care urmează să fie create.
- Când clasele părinte aleg crearea de obiecte în subclasele sale.
UML pentru modelul metodei din fabrică
- Vom crea o clasă abstractă Plan și clase concrete care extind clasa abstractă Plan. O clasă din fabrică GetPlanFactory este definită ca un pas următor.
- Clasa GenerateBill va folosi GetPlanFactory pentru a obține un obiect Plan. Acesta va transmite informații (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) către GetPalnFactory pentru a obține tipul de obiect de care are nevoie.
Calculați factura de energie electrică: un exemplu real de metodă din fabrică
Pasul 1: Creați o clasă de abstract 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.
Pasul 2: Creați clasele concrete care extind clasa Plan abstract.
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.
Pasul 3: Creați un GetPlanFactory pentru a genera obiectul claselor concrete pe baza informațiilor date..
int la char java
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.
Pasul 4: Generați Bill folosind GetPlanFactory pentru a obține obiectul claselor concrete prin transmiterea unei informații precum tipul de plan DOMESTICPLAN sau COMMERCIALPLAN sau 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.
descărcați acest exemplu de factură de energie electrică