Part 3 | Factory Method Pattern شرح

  أول باترن معانا فى السلسلة بتاعه ال design patterns هى ال Factory Method Pattern

دردشة

لما تقرأ الشرح هتلاقى نفسك بتعمل الباترن دى فى كودك وانت مش عارف يعنى انت بتعمل عظمه من ورانا.




فى الاول بس عايز اقولك ان ال Singleton pattern و الباترن بتاع النهارده فى نوع ال Creational Design Patterns واحنا كنا قولنا ان كل الباترن اللى فى النوع دا مهمتها ايه ؟
مظبوط بتتعامل مع الاوبجيكت من ناحية إنشاءها حسب البرنامج اللى بعمله من الاخر يقلل من حته "new" مثلا لو عندك اوبجيكت محتاج اعمل واحد شبهه مش محتاج اكرره.

طيب أيه المشكلة اللى بتحلها الباترن دى يعم الحج تعالى اديك مثال عشان نطلع منه تعريف ال Factory Method Pattern .

-----------------------------------------------------------------------------------------------------------------------------

المشكلة

تخيل أنت عندك شركة شحن بيجى ليك ناس عايز توصل طلباتهم فأنت اتفقت مع ناس عندها عربيات توصل طلبات الناس فأنت جيت فى كودك الجميل وعامل كلاس اسمه car وبدأت تشتغل يجى ليك الطلبات تشغل الكلاس بتاعك car والدنيا حلو وعمال تكسب.
بس بعدها لقيت السفن جايه ليك بتقولك والله ممكن نتفق معاك نوصل ليك طلبات شركتك فانت قولت وليه لا انا اضمها للاختيارات بتاع العميل وهو يشوف هيختار ايه ورحت قايل لل developer بتاعك ضيف ليا طريقه الشحن بالسفن دى.

المشكله فين بقا انه لما يجى يعمل كلاس جديد Ship للسفن هيضر يعمله من الاول رغم ان هيكون فيه حاجات متشابهه بينه وبين كلاس ال car .

---------------------------------------------------------------------------------------------------------------

الحل



1- تعريف ال Product
هنعمل كلاس نوعه abstract or interface ونسميه ShippingType ونسيب جواها كل الحاجات اللى ممكن تتكرر او متشابهه وهو دا ال Product .

2- هننشئ Concrete Classes
هنعمل كلاس لكل نوع شحن جديد class car , class ship
وهيرث من ال ShippingType اللى هو ال super بالنسبالهم فبتالى هعمل overriding للفانكشن المشتركه بين انواع الشحن .

3-كلاس Factory
ودا اللى فيه بحدد هشتغل على اى كلاس من ال concrete classes لان فيه ميثود مسئوله انها ترجع اوبجيكت وعشان كدا اتسمى
Factory Method Pattern

4- كلاس ال Client
ودا اللى بنفذ فيه ال operations بتاعتى

---------------------------------------------------------------------------------------------------------------
مثال

Calculate Electricity Bill : A Real World Example of Factory Method




Step 1: Create a Plan abstract class.


abstract class Plan{  
         protected double rate;  
         abstract void getRate();  
   
         public void calculateBill(int units){  
              System.out.println(units*rate);  
          }  
}//end of Plan class


Step 2: Create the concrete classes that extends Plan abstract class.


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.  
Step 3: Create a GetPlanFactory to generate object of concrete classes based on given information
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. 

Step 4: Generate Bill by using the GetPlanFactory

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.  

output




--------------------------------------------------------------------------------------------------------------------------------------

التعريف

just define an interface or abstract class for creating an object but let the subclasses decide which class to instantiate.

-----------------------------------------------------------------------------------------------------------------------------

ملخص الباترن

ال client سأل ال factory يحددلى اى كلاس هستخدمه

--------------------------------------------------------------------------------------------------------------------------------------

الى اللقاء

بس كدا انا خلصت عندكوا اى تعليقات او اضافه ياريت تعرفونا ومتنساش تعمل لايك وشير وصبصكرايب معلش اندمجت شويه😍😍
يلا سلاااااام.
#Part3
#Design_patterns
#Interview_Question
#Next_Step

Design Patterns Part 1

Singleton Pattern Part 2

Channel Youtube


Comments