من اینجا هستم تا بحث پیرامون الگوهای طراحی را ادامه دهم. امروز ما یک الگوی طراحی خلاقانه دیگر به نام Factory Method را مورد بحث قرار خواهیم داد.
در صورتی که به مقالات قبلی من نگاه نکرده اید، از طریق لینک زیر بروید:
- الگوهای طراحی ساده شده: قسمت 1
- الگوهای طراحی ساده شده - قسمت 2 (Singleton)
- الگوهای طراحی ساده شده - قسمت 3 (کارخانه ساده)
- الگوهای طراحی ساده شده - قسمت 4 (کارخانه انتزاعی)
قبل از صحبت در مورد اجرای آن، اجازه دهید با تعریف آن شروع کنیم.
الگوی روش کارخانه با چند تفاوت مشابه الگوی کارخانه ساده است. برخلاف Simple factory، در اینجا کلاینت کلاس کارخانه را فراخوانی نمیکند، بلکه رابط کارخانه را فراخوانی میکند. رابط کارخانه همچنین دارای پیاده سازی های مشخصی است که در آن ایجاد شی انجام می شود.
حالا بیایید در مورد اجرا صحبت کنیم.
نحوه استفاده از الگوی روش کارخانه بیایید
سعی کنیم با استفاده از مثال ساده آن را درک کنیم.
فرض کنید مشتری می خواهد از قیمت خودروهای مارک های مختلف در جاده مطلع شود و رابطی مانند زیر داشته باشد.
- interface ICar
- {
- string GetOnRoadPrice(string model);
- }
و در اینجا اجرای ملموس 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 ایجاد کنیم که بین لایه های مشتری و کسب و کار قرار می گیرد و شی کارخانه مورد نیاز را در اختیار مشتری قرار می دهد.
- interface ICarFactory
- {
- ICar GetCar();
- }
و در اینجا اجرای ملموس ICarFactory پیش می رود.
- class MarutiFactory : ICarFactory
- {
- public ICar GetCar()
- {
- return new Maruti();
- }
- }
- class HyundaiFactory : ICarFactory
- {
- public ICar GetCar()
- {
- return new Hyundai();
- }
- }
حال بیایید ببینیم مشتری چگونه می تواند از تنظیماتی که تاکنون ایجاد کرده ایم استفاده کند.
- //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));
خروجی
- //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));
خروجی
و در اینجا نمودار کلاس آمده است.
همانطور که در کد بالا می بینید که
- مشتری فقط با ایجاد نمونه ای از مارک کارخانه خودرو مربوطه، شی کارخانه مورد نیاز را دریافت می کند.
- و سپس با فراخوانی روش GetCar شیء بازیابی شده کارخانه، شیء مورد نیاز خودرو را دریافت می کند.
- مشتری با تماس با روش GetOnRoadPrice و عبور نام مدل، قیمت خودرو را در جاده دریافت می کند.
بنابراین برای خلاصه کردن، با استفاده از الگوی Factory Method به موارد زیر دست یافتیم:
- اتصال ضعیف بین لایه های مشتری و کسب و کار.
- مشتری فقط از Factory Interface (ICarFactory) آگاه است و از پیاده سازی های مشخص آنها آگاه نیست.
- کلاس های بتن انتزاعی (Maruti، Hyundai) از مشتری.
امیدوارم که مقاله را دوست داشته باشید. منتظر نظرات/پیشنهادات شما هستیم.