همراهان رجیرانی سلام ،حال شماخوبه ؟ وقتتون بخیر و شادی باشه .و در سلامتی کامل با اموزشهای ما همراه بمانید.از اینکه سایت ما را برای اموزش انتخاب کرده اید از شما ممنونیم . در این اموزش و در این مقاله به یکی دیگر از Design Patternهای ضروری خواهیم پرداخت به نام Simple Factory.

در صورتی که مقالات قبلی را مطالعه نکرده اید، از طریق تاپیک های زیر قابل دسترس هستند:

·       Design Patterns

·       Singleton Pattern
هدف از Simple Factory

در استفاده از Factory Pattern دو هدف دنبال می شود. یکی loose coupling بین client و لایه business و دیگری نگهداری تمام کدهای مربوط به منطق ساخت شی در یک جای مشخص.
هدف از loose coupling

در برنامه نویسی مدرن، تغییر در سیستم موجود مکرراً به وجود می آید و انتظار می رود طراحی نرم افزار بسیار مقیاس پذیر باشد و از طرفی عدم وجود طراحی loosely-coupled خیلی مشکل ساز خواهد بود.

برای مثال در یک برنامه با معماری ۳ لایه، اگر منطق ساخت object سمت client باشد، برای هر کلاس واقعی جدید، نه تنها لایه Bussiness، بلکه لایه client را نیز باید بروزرسانی کرد.  درباره نگهداری و تست آن فکر کنید!

بله، درست متوجه شدید! Client باید نوع شی ای که نیاز دارد را پاس دهد و با استفاده از Factory Pattern آن را بدست آورد.
چگونه از Simple Factory Pattern استفاده کنیم؟

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

interface ICar

{

string GetOnRoadPrice(string model);

}

حالا باید یک کلاس Factory بسازیم که بین client و لایه Business قرار بگیرد و بر اساس برند ماشین ارسال شده، شی مورد نیاز برای client آماده شود.

class CarFactory

{

static public ICar GetCar(string carBrand)

{

if (carBrand == “Maruti”)

{

return new Maruti();

}

else if (carBrand == “Hyundai”)

{

return new Hyundai();

}

return null;

}

}

کلاس های business واقعی عبارتند از:

class Maruti : ICar

{

public string GetOnRoadPrice(string model)

{

if (model == “Alto 800 VXI”)

{

return “3.4 Lakhs INR”;

}

else

{

return “Information not available!”;

}

}

}

class Hyundai : ICar

{

public string GetOnRoadPrice(string model)

{

if (model == “Grand i10 Magna 1.2 BSV”)

{

return “5.4 Lakhs INR”;

}

else

{

return “Information not available!”;

}

}

}

حالا ببینیم client چطور از تنظیماتی که قبلاً ایجاد کردیم استفاده می کند.

//Client side

Console.Title = “Factory pattern demo”;

ICar car = null;

string model = null;

//Maruti

car = CarFactory.GetCar(“Maruti”);

model = “Alto 800 VXI”;

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

خروجی:

آموزشگاه برنامه نویسی تحلیل داده

//Hyundai

car = CarFactory.GetCar(“Hyundai”);

model = “Grand i10 Magna 1.2 BSV”;

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

خروجی:

آموزشگاه برنامه نویسی تحلیل داده

در ادامه می توانید class diagram آن را مشاهده کنید:

آموزشگاه برنامه نویسی تحلیل داده

همانطور که در قطعه کد آخر مشاهده می کنید، client با ارسال برند ماشین، شی مورد نظر خود را بدست می آورد. سپس متد GetOnRoadPrice را فراخوانی میکند و با ارسال نام مدل، قیمت آن را بدست می آورد.

به طور خلاصه، با استفاده از simple factory به موارد زیر دست خواهیم یافت:

·      Loose coupling بین لایه های client و Bussiness.

·      قرار دادن منطق ایجاد اشیاء در یک مکان مشخص

·      کلاس های واقعی صریح برای client (Maruti و Hyundai)