کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

Design Patterns-الگوی Factory Method

Factory Method

Factory Method Pattern اما با کمی تفاوت، مشابه Simple factory pattern است. بر خلاف Simple factory، client ها دیگر کلاس factory را فراخوانی نمی کنند و به جای آن اینترفیس factory را صدا می زنند. اینترفیس factory بعداً، زمانی که ساخت شی انجام شد، پیاده سازی می شود.
در صورتی که مقالات قبلی را مطالعه نکرده اید، از طریق لینک زیر قابل دسترس هستند:


چطور از Factory method pattern استفاده کنیم؟

با یک مثال ساده شروع می کنیم. فرض کنید client می خواهد قیمت برندهای مختلف ماشین را بداند. بنابراین یک اینترفیس به شکل زیر خواهیم داشت:


interface ICar

{

   string GetOnRoadPrice(string model);

}

و پیاده سازی concrete از ICar:


class Maruti : ICar

{

   public string GetOnRoadPrice(string model)

   {

       //Logic to get OnRoadPrice based on model 

       if (model == "Alto 800 VXI")

       {

           return "3.4 Lakhs INR";

       }

       else

       {

           return "Information not available!";

       }

   }

}

 

class Hyundai : ICar

{

   public string GetOnRoadPrice(string model)

   {

       //Logic to get OnRoadPrice based on model 

       if (model == "Grand i10 Magna 1.2 BSV")

       {

           return "5.4 Lakhs INR";

       }

       else

       {

           return "Information not available!";

       }

   }

}

حالا به یک Factory Interface نیاز داریم که واسط بین لایه Bussiness و client باشد و اشیاء factory مورد نیاز را برای client فراهم کند.


interface ICarFactory

{

   ICar GetCar();

}

در ادامه پیاده سازی ICarFactory را مشاهده می کنید:


class MarutiFactory : ICarFactory

{

   public ICar GetCar()

   {

       return new Maruti();

   }

}

 

class HyundaiFactory : ICarFactory

{

   public ICar GetCar()

   {

       return new Hyundai();

   }

} 

حالا ببینیم client چگونه از تنظیمات ایجاد شده استفاده می کند:


//Client side 

Console.Title = "Factory method pattern demo";

ICarFactory carFactory = null;

ICar car = null;

string model = null;

 

//Maruti 

carFactory = new MarutiFactory();

car = carFactory.GetCar();

model = "Alto 800 VXI";

Console.WriteLine("On-road price for {0} car is: {1} ", model, car.GetOnRoadPrice(model)); 

خروجی:


آموزش Entity FrameWork 

به همراه Design Pattern
//Hyundai 

carFactory = new HyundaiFactory();

car = carFactory.GetCar();

model = "Grand i10 Magna 1.2 BSV";

Console.WriteLine("On-road price for {0} car is: {1} ", model, car.GetOnRoadPrice(model));

خروجی:


آموزش Entity FrameWork 

به همراه Design Pattern

نمودار کلاس:


آموزش Entity FrameWork 

به همراه Design Pattern

همانطور که در کد فوق مشاهده کردید:


  1. Client، با ساخت یک نمونه از factory برند ماشین، شی factory مورد نیاز را بدست می آورد.
  2. سپس با فراخوانی متد GetCar از شی factory دریافت شده، شی مربوط به ماشین مورد نظر را دریافت میکند.
  3. Client با فراخوانی متد GetOnRoadPrice و ارسال نام مدل ماشین، می تواند قیمت ماشین را بدست آورد.

به طور خلاصه با استفاده از الگوی Factory Method به موارد زیر دست خواهیم یافت:


  • Loose coupling بین لایه های business و client
  • Client فقط از ICarFactory خبر دارد و هیچ اطلاعی از پیاده سازی آن ندارد.
  • کلاس های Abstract شده از طرف Client (Maruti و Hyundai)
1395/02/05 9583 1698
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...