logo

Wzór metody fabrycznej

Wzorzec fabryczny lub wzorzec metody fabrycznej to właśnie mówi zdefiniuj interfejs lub klasę abstrakcyjną do tworzenia obiektu, ale pozwól podklasom zdecydować, która klasa ma zostać utworzona. Innymi słowy, podklasy są odpowiedzialne za utworzenie instancji klasy.

Wzorzec metody fabrycznej jest również znany jako Wirtualny Konstruktor.

dołączanie ciągu w Javie

Zaleta fabrycznego wzorca projektowego

  • Wzorzec metody fabrycznej pozwala podklasom wybrać typ obiektów, które mają zostać utworzone.
  • Promuje luźne powiązanie eliminując potrzebę wiązania klas specyficznych dla aplikacji w kodzie. Oznacza to, że kod wchodzi w interakcję wyłącznie z wynikowym interfejsem lub klasą abstrakcyjną, dzięki czemu będzie działać z dowolnymi klasami, które implementują ten interfejs lub rozszerzają tę klasę abstrakcyjną.

Stosowanie fabrycznego wzorca projektowego

  • Gdy klasa nie wie, jakie podklasy będą musiały zostać utworzone
  • Gdy klasa chce, aby jej podklasy określały obiekty, które mają zostać utworzone.
  • Kiedy klasy nadrzędne wybierają tworzenie obiektów do swoich podklas.

UML dla wzorca metody fabrycznej

  • Zamierzamy utworzyć klasę abstrakcyjną Plan i klasy konkretne, które stanowią rozszerzenie klasy abstrakcyjnej Plan. Następnym krokiem jest zdefiniowanie klasy fabryki GetPlanFactory.
  • Klasa GenerateBill użyje GetPlanFactory, aby uzyskać obiekt Plan. Przekaże informacje (DOMESTICPLAN / COMMERCIALPLAN / INSTITUCTIONALPLAN) do GetPalnFactory, aby uzyskać potrzebny typ obiektu.

Oblicz rachunek za energię elektryczną: rzeczywisty przykład metody fabrycznej

Krok 1: Utwórz klasę abstrakcyjną 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. 

Krok 2: Utwórz konkretne klasy, które rozszerzają klasę abstrakcyjną 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. 

Krok 3: Utwórz GetPlanFactory, aby wygenerować obiekt konkretnych klas na podstawie podanych informacji.

komentarz w JavaScript
 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. 

Krok 4: Wygeneruj rachunek za pomocą GetPlanFactory, aby uzyskać obiekt konkretnych klas, przekazując informacje takie jak typ planu DOMESTICPLAN, COMMERCIALPLAN lub 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. 

pobierz ten Przykład rachunku za energię elektryczną

Wyjście