Bir Fabrika Modeli veya Fabrika Yöntemi Modeli şunu söylüyor: bir nesne oluşturmak için bir arayüz veya soyut sınıf tanımlayın ancak alt sınıfların hangi sınıfın örnekleneceğine karar vermesine izin verin. Başka bir deyişle, alt sınıflar sınıfın örneğini oluşturmaktan sorumludur.
Fabrika Yöntemi Deseni aynı zamanda şu şekilde de bilinir: Sanal Oluşturucu.
Fabrika Tasarım Deseninin Avantajı
- Fabrika Yöntemi Deseni, alt sınıfların oluşturulacak nesnelerin türünü seçmesine olanak tanır.
- Teşvik eder gevşek bağlantı uygulamaya özel sınıfları koda bağlama ihtiyacını ortadan kaldırarak. Bu, kodun yalnızca ortaya çıkan arayüz veya soyut sınıfla etkileşime girdiği anlamına gelir, böylece bu arayüzü uygulayan veya bu soyut sınıfı genişleten tüm sınıflarla çalışır.
Fabrika Tasarım Deseninin Kullanımı
- Bir sınıf, oluşturmak için hangi alt sınıfların gerekli olacağını bilmediğinde
- Bir sınıf, alt sınıflarının oluşturulacak nesneleri belirtmesini istediğinde.
- Ebeveyn sınıfları, alt sınıflarına nesnelerin oluşturulmasını seçtiğinde.
Fabrika Yöntemi Kalıbı için UML
- Plan soyut sınıfını ve Plan soyut sınıfını genişleten somut sınıfları oluşturacağız. Bir sonraki adım olarak GetPlanFactory fabrika sınıfı tanımlanır.
- GenerateBill sınıfı, bir Plan nesnesi almak için GetPlanFactory'yi kullanacaktır. İhtiyaç duyduğu nesne türünü almak için bilgileri (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) GetPalnFactory'ye iletecektir.
Elektrik Faturasını Hesaplayın: Fabrika Yönteminin Gerçek Dünya Örneği
Aşama 1: Bir Plan soyut sınıfı oluşturun.
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.
Adım 2: Plan soyut sınıfını genişleten somut sınıfları oluşturun.
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.
Aşama 3: Verilen bilgilere dayanarak somut sınıfların nesnesini oluşturmak için bir GetPlanFactory oluşturun.
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.
Adım 4: DOMESTICPLAN veya COMMERCIALPLAN veya INSTITUTIONALPLAN plan türü gibi bir bilgiyi ileterek somut sınıfların nesnesini almak için GetPlanFactory'yi kullanarak Fatura oluşturun.
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.
bunu indir Elektrik faturası Örneği