الگوی Factory Method Design چیست؟
Factory Method Design Pattern یا الگوی طراحی کارخانه یک الگوی ایجادی برای ایجاد اشیاء، بدون مشخص کردن کلاس دقیق شی ارائه می کند. به طور مثال در یک کارخانه خودروسازی، می توان از آن برای ساخت انواع مختلف خودروها (مانند خودروهای سدان، شاسی بلند، کامیونها) بدون مشخص کردن مدل دقیق هر خودرو استفاده کرد.
تصور کنید که در حال ایجاد یک برنامه مدیریت لجستیک هستید. اولین نسخه برنامه شما فقط می تواند حمل و نقل با کامیون را انجام دهد، بنابراین بخش عمده کد شما در کلاس Truck قرار دارد.
پس از مدتی، برنامه شما بسیار محبوب می شود. هر روز ده ها درخواست از شرکت های حمل و نقل دریایی برای گنجاندن تدارکات دریایی در برنامه دریافت می کنید.
در حال حاضر، بیشتر کد شما با کلاس Truck کوپل شده است و افزودن کلاس Ship به برنامه مستلزم ایجاد تغییراتی در کل پایگاه کد است. علاوه بر این، اگر بعداً تصمیم گرفتید نوع دیگری از حمل و نقل را به برنامه اضافه کنید، احتمالاً باید همه این تغییرات را دوباره انجام دهید. در نتیجه، کد بسیار بدی خواهید داشت، مملو از شرایطی که رفتار برنامه را بسته به کلاس اشیاء حمل و نقل تغییر میدهد. راه حل این مسئله استفاده از الگوی Factory Method است.
ساختار الگوی Factor Method
الگوی Factor Method در اجرای پایه خود چهار جزء دارد:
- Product یا محصول: محصول یک اینترفیس را اعلام می کند که برای همه اشیایی که می توانند توسط سازنده و زیر کلاس های آن تولید شوند مشترک است.
- Concrete Product :Concrete Product ها پیاده سازی های مختلف اینترفیس Product هستند.
- Creator: کلاس Creator متد Factory را اعلام می کند که Product های جدید را بر می گرداند. نوع بازگشتی این متد باید با اینترفیس Product مطابقت داشته باشد.
- Concrete Creator: یک کلاس است که متد پایه Factory را override می کند. بنابراین نوع متفاوتی از Product را برمی گرداند.
در اینجا مثالی از نحوه پیاده سازی الگوی Factory Method Design در سی شارپ برای یک کارخانه خودرو آورده شده است:
در این مثال، کلاس CarFactory یک Factory و کلاس های Sedan ، SUV و Truck محصولات یا Product ها هستند. متد GetCar از کلاس CarFactory یک Creator است و وظیفه ایجاد نوع مناسب خودرو بر اساس نوع خودروی ورودی را بر عهده دارد. الگوی Factory منطق ایجاد شی را کپسوله کرده است و اضافه کردن Product جدید یا تغییر کلاس های Product موجود را بدون تأثیر بر کد کلاینت آسان می کند.
می توانید از این مثال به عنوان پایه استفاده کنید و با افزودن ویژگی ها یا روش هایی به کلاس Car و کلاس های مشتق شده از آن مانند تعداد درها، اندازه موتور و غیره آن را گسترش دهید.
مشکلات الگوی ساده Factory در سی شارپ
- اگر نیاز به افزودن هر Product جدیدی (در این مثال یعنی یک خودروی جدید) داشته باشیم، باید یک case جدید به Switch در متد GetCar در کلاس CarFactory اضافه کنیم. این اصل Open closed Principle یا اصل باز و بسته(OCP) در Solid را نقض می کند.
- یک اتصال محکم بین کلاس Factory (CarFactory ) و کلاس های Product یا محصول (SUV،Sedan و Truck) وجود دارد.
نتیجه گیری
الگوهای طراحی یکی از مهمترین جنبه های طراحی و معماری نرم افزار است. ما در این مقاله مفاهیم الگوی Factory Method Design را با یک مثال در سی شارپ بررسی و مزایا و معایب آن را بررسی کردیم.
برای ثبت نظر باید در سایت ثبت نام یا ورود نمایید