logo

نمط طريقة المصنع

نمط المصنع أو نمط طريقة المصنع يقول ذلك فقط حدد واجهة أو فئة مجردة لإنشاء كائن ولكن دع الفئات الفرعية تقرر الفئة التي سيتم إنشاء مثيل لها. بمعنى آخر، الفئات الفرعية مسؤولة عن إنشاء مثيل للفئة.

يُعرف نمط طريقة المصنع أيضًا باسم منشئ الظاهري.

الاستفادة من نمط تصميم المصنع

  • يسمح نمط أسلوب المصنع للفئات الفرعية باختيار نوع الكائنات المراد إنشاؤها.
  • إنه يعزز اقتران فضفاض من خلال إلغاء الحاجة إلى ربط الفئات الخاصة بالتطبيقات في التعليمات البرمجية. وهذا يعني أن الكود يتفاعل فقط مع الواجهة الناتجة أو الفئة المجردة، بحيث يعمل مع أي فئة تنفذ تلك الواجهة أو تعمل على توسيع تلك الفئة المجردة.

استخدام نمط تصميم المصنع

  • عندما لا يعرف الفصل ما هي الفئات الفرعية التي ستكون مطلوبة لإنشائها
  • عندما يريد الفصل أن تحدد فئاته الفرعية الكائنات التي سيتم إنشاؤها.
  • عندما تختار الفئات الأم إنشاء الكائنات لفئاتها الفرعية.

UML لنمط طريقة المصنع

  • سنقوم بإنشاء فئة مجردة للخطة وفئات ملموسة تعمل على توسيع فئة مجردة الخطة. يتم تعريف فئة المصنع GetPlanFactory كخطوة تالية.
  • ستستخدم فئة GenerateBill GetPlanFactory للحصول على كائن الخطة. سيقوم بتمرير المعلومات (DOMESTICPLAN / COMMERCIALPLAN / INSTITUTIONALPLAN) إلى GetPalnFactory للحصول على نوع الكائن الذي يحتاجه.

حساب فاتورة الكهرباء: مثال حقيقي لطريقة المصنع

الخطوة 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: قم بإنشاء GetPlanFactory لإنشاء كائن من فئات محددة بناءً على معلومات معينة.

 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: قم بإنشاء فاتورة باستخدام GetPlanFactory للحصول على كائن الفئات المحددة عن طريق تمرير معلومات مثل نوع الخطة DOMESTICPLAN أو COMMERCIALPLAN أو 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. 

قم بتنزيل مثال فاتورة الكهرباء

انتاج |