الگوی طراحی Factory Method چیست؟

دسته بندی: طراحی نرم‌افزار
10 دقیقه زمان مطالعه
1400/07/18
0 نظر

الگوی طراحی Factory Method یکی از الگوهای دسته ایجادی است. مفهوم الگوی كارخانه، دقیقا از معنی لغوی آن مشخص است. كارخانه مكانی است كه در آن كالاها و محصولاتی تولید می‌شود و در بحث الگوهای طراحی، یك Factory كلاسی است كه نمونه‌هایی از كلاس‌های دیگر را با توجه به پارامترهایی كه برای آن ارسال می‌شود، ایجاد می‌كند.

منظور از الگوی طراحی Factory Method چیست؟

بگذارید با یک مثال بررسی کنیم. یک فروشگاه پوشاک را در نظر بگیرید. هر زمان كه فروشگاه به لباس خاصی نیاز داشته باشد، اسامی را به تولیدكننده ارسال می‌كند و تولیدكننده با توجه به اسامی ارسال شده، آن لباس‌ها را تولید كرده و به فروشگاه می‌فرستد. در این مثال تولیدكننده همان كلاس Factory است كه با توجه به پارامترهای ارسال شده (لیست پوشاك مورد نظر فروشگاه) لباس مورد نظر (شی مورد نظر) را تولید و برای مشتری ارسال می‌كند.

مزیت الگوی Factory Method

بنابر گفته GoF هدف از الگوی Factory Method عبارت است از :

«یک رابط کاربری برای ساخت اشیا تعریف می‌کند و در عین حال اجازه می‌دهد تا زیر کلاس‌ها در مورد این‌که چه شی را نمونه‌سازی کنند تصمیم بگیرند. در واقع این الگو اجازه می‌دهد تا نمونه‌سازی را به زیرکلاس‌ها محول شود.»

این الگو پیچیدگی ایجاد اشیا را برای کاربر پنهان می‌کند. با استفاده از این الگو می‌توانیم بدون این‌که کلاس دقیق یک شی را مشخص کنیم آن را ایجاد و از آن استفاده کنیم. کاربر معمولا شی واقعی را ایجاد نمی‌کند، بلکه با یک واسط یا کلاس انتزاعی در ارتباط است و کل مسئولیت ایجاد کلاس واقعی را به Factory Method می‌سپارد.

بنابراین در طراحی نرم‌افزار با استفاده از این الگو  می‌توانیم نمونه‌سازی از کلاس‌ها را بدون دانستن جزئیات پیاده‌سازی آن‌ها انجام دهیم. همچنین الگوی Factory این امکان را فراهم می‌کند که محصول جدیدی را به راحتی و بدون نیاز به تغییر کد، به محصولات خود اضافه کنیم.

ویژگی‌ها و اجزای الگوی Factory

Class Diagram

در شکل ۱ کلاس دیاگرام مربوط به این الگو نمایش داده شده و در زیر آن شرکت‌کنندگان در آن و نقش هر یک بیان شده است.

Factory Method class diagram

شکل ۱ : کلاس دیاگرام الگوی Factory Method

نقش کلاس‌ها

  • Product: 

یک واسط از اشیایی که Factory method ایجاد می‌کند، تعریف می‌نماید.

  • ConcreteProduct :

پیاده‌سازی Interface Product.

  • Creator:

تعریف Factory Method که یک شی از نوع Product را برمی‌گرداند و ممکن است به صورت پیش فرض، طوری پیاده‌سازی شده باشد که یک ConcreteProduct را برگرداند. همچنین ممکن است FactoryMethod را برای ایجاد شی از نوع Product صدا بزند.

  • ConcreteCreator :

Override کردن factory method برای برگرداندن یک نمونه از  ConcreteProduct.

سایر ویژگی‌های کلیدی الگوی طراحی Factory

در جدول ۱ به‌صورت خلاصه هدف الگو، نام یا نام‌های دیگری که الگو با آن شناخته می‌شود، مواقعی که می‌توان از این الگو استفاده کرد، مزایا و معایب استفاده از این الگو و الگوهای مرتبط به این الگو توضیح داده شده است.

جدول ۱:  ویژگی‌های Factory Method

عنوان شرح
نام Factory Method Pattern
هدف ارائه یک واسط برای ساخت اشیا، همچنین اجازه می‌دهد تا زیر کلاس‌ها در مورد این‌که چه شی‌ای را نمونه‌سازی کنند تصمیم بگیرند.
نام‌های دیگر این الگو با نام Virtual Constructor هم شناخته می‌شوند.
کاربرد زمانی از الگوی Factory استفاده کنید که :
  • یک یا چند کلاس محصول دارید که واسط یکسانی را پیاده‌سازی کرده‌اند.
  • روند تصمیم‌گیری و نمونه‌سازی آن‌ها از اهمیت کم‌تری برای شما برخودار است یا انعطاف‌پذیری برنامه برای شما مهم‌تر است.
  • منطق تصمیم‌گیری و نمونه‌سازی از کلاس‌ها در مکان‌های مختلف برنامه تکرار می‌شود.
  • نمونه‌سازی از کلاس‌ها مستلزم درگیر شدن با پیچیدگی‌هایی است که برای کلاینت مزاحمت ایجاد می‌کند.
  • احتمال می‌دهید در آینده محصول‌های مشابهی با همان ساختار انتزاعی به برنامه افزوده شود.
  • کلاینت نمی‌تواند نوع کلاس‌هایی که قرار است از آن‌ها نمونه‌سازی کند، پیش‌بینی کند یا این مساله برایش اهمیتی ندارد.
نتایج مزایای این الگو :
  • کاهش جفت شدگی و وابستگی.
  • فرایند ساخت کلاس‌های مرتبط با هم در یک جا جمع شده و نظم می‌گیرد. بدین ترتیب تعریف زیرکلاس‌ها نیز روشن‌تر و ساده‌تر انجام می‌شود.
  • این الگو وابستگی بین کلاس‌ها را کاهش می‌دهد.
  • اگر در نحوه ایجاد اشیا تغییری رخ دهد هیچ نیازی به تغییر در کد کلاینت‌ها نخواهد بود.

معایب این الگو :

  • از معایب آن مربوط به زمانی است که کلاس‌های مشترک زیادی نداریم و مجبوریم که Factoryهای زیادی بنویسیم.
الگوهای مرتبط
  • Abstract Factory: بیشتر مواقع الگوی کارخانه‌ی انتزاعی از تعدادی کلاس استفاده می‌کند که الگوی Factory Method در آن‌ها پیاده‌سازی شده ‌است.
  • Prototypes: در صورتی که الگوی Prototype برای محصول‌ها پیاده‌سازی شود، متد کارخانه می‌تواند یک Prototype Manager استخدام کرده و نمونه‌ی جدید را از مدیر الگو درخواست کند.
  • Strategy: در صورتی که در سیستمی از الگوی Strategy استفاده شده باشد، می‌توان در طول برنامه برای انتخاب استراتژی جاری از الگوی Factory Method استفاده کرد، به نحوی که یک نوع شمارشی تعریف کرد که نوع استراتژی مشخص ‌کند.

جمع‌بندی

با توجه به این که همیشه امکان گسترش نرم‌افزارها در آینده وجود دارد استفاده از الگوی Factory Method می‌تواند بسیار مفید و کاربردی باشد و ایجاد تغییرات را آسان‌تر کند. با توجه به انعطاف‌پذیر بودن این الگو بهینه‌سازی راحت‌تر شده و در هزینه‌ها پیش رو نیز صرفه‌جویی خواهد شد. آیا شما هم تجربه استفاده از الگوی Factory Method را در طراحی نرم‌افزار داشته‌اید؟ خوشحال می‌شویم که تجربه خود را با ما به اشتراک بگذارید.

۴.۷/۵ - (۳ امتیاز)
نویسنده:

مطالب مرتبط