logo

Фабрички метод образац

Фацтори Паттерн или Фацтори Метход Паттерн каже да је управо то дефинише интерфејс или апстрактну класу за креирање објекта, али нека поткласе одлуче коју класу да инстанцирају. Другим речима, подкласе су одговорне за креирање инстанце класе.

Образац фабричке методе је такође познат као Виртуелни конструктор.

Предност обрасца фабричког дизајна

  • Фацтори Метход Паттерн омогућава подкласама да изаберу тип објеката за креирање.
  • Промовише се лабава веза елиминисањем потребе за везивањем класа специфичних за апликацију у код. То значи да код интерагује искључиво са резултујућим интерфејсом или апстрактном класом, тако да ће радити са свим класама које имплементирају тај интерфејс или које проширују ту апстрактну класу.

Употреба обрасца фабричког дизајна

  • Када класа не зна које ће подкласе бити потребне за креирање
  • Када класа жели да њене подкласе специфицирају објекте које треба креирати.
  • Када родитељске класе изаберу креирање објеката за своје подкласе.

УМЛ за образац фабричког метода

  • Направићемо апстрактну класу План и конкретне класе које проширују апстрактну класу План. Фабричка класа ГетПланФацтори је дефинисана као следећи корак.
  • ГенератеБилл класа ће користити ГетПланФацтори да добије објекат План. Проследиће информације (ДОМЕСТИЦПЛАН / ЦОММЕРЦИАЛПЛАН / ИНСТИТУТИОНАЛПЛАН) у ГетПалнФацтори да би добио тип објекта који му је потребан.

Израчунајте рачун за струју: стварни пример фабричке методе

Корак 1: Направите апстрактну класу План.

 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: Креирајте конкретне класе које проширују План апстрактне класе.

глобална вар у јс
 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: Креирајте ГетПланФацтори да бисте генерисали објекат конкретних класа на основу датих информација.

 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. корак: Генеришите рачун користећи ГетПланФацтори да бисте добили објекат конкретних класа прослеђивањем информација као што је тип плана ДОМЕСТИЦПЛАН или ЦОММЕРЦИАЛПЛАН или ИНСТИТУТИОНАЛПЛАН.

 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. 

преузмите овај пример рачуна за струју

Излаз