الگوی طراحی کارخانه انتزاعی (Abstract Factory Design Patterns)



visibility  
mode_comment   ۱

دیزاین پترن ها در کنار تمرکز بر حل مشکلات برنامه نویسی شی گرا، اهداف متفاوتی را دنبال می کنند. یکی از اهداف اصلی آن ها، افزایش خوانایی کدها و کاهش میزان کدنویسی است. الگوی طراحی کارخانه انتزاعی یا Abstract Factory جزو الگوهای طراحی سازنده (Creational) است که برای مدیریت ساخت اشیا از کلاس ها توسعه داده شده است. این الگوی طراحی به شما اجازه می دهد که مجموعه ای از اشیا مرتبط را بدون نیاز به ساخت کلاس های جداگانه و متعدد ایجاد کنید.

الگوی طراحی کارخانه انتزاعی abstract factory design patternکاربرد الگوی طراحی کارخانه انتزاعی تا حدودی مانند الگوی طراحی Factory است. این الگوی طراحی معمولا زمانی استفاده می شود که کاربر به صورت دقیق از نوع شی ای که می خواهد ایجاد کند اطلاع نداشته باشد. اگر قصد دارید از این الگوی طراحی در فرآیند کدنویسی خود استفاده کنید، از شما دعوت می کنم تا در ادامه این مطلب همراه ما باشید.

چرا باید از الگوی طراحی Factory استفاده کنیم

تصور کنید که یکی از تولیدکنندگان محصولات اداری به منظور طراحی نرم افزاری به منظور فروش و مدیریت خط تولید محصولاتش به شما مراجعه می کند. در این نرم افزار محصولاتی از جمله انواع مبلمان، میز و... طراحی می شوند و سپس به فروش می رسند. در حالت پیش فرض نرم افزار شما باید به ازای هر محصول یک کلاس (Class) داشته باشد تا رفتار و وظایف مربوط به هر کدام از اشیا را برای خط تولید تعریف کند. از طرفی دیگر این محصولات معمولا با یکدیگر به فروش می رسند و مکمل یکدیگر هستند.

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

الگوی طراحی کارخانه انتزاعی abstract factory design pattern

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

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

راه حل الگوی طراحی کارخانه انتزاعی

راه حلی که الگوی کارخانه انتزاعی برای اینگونه مسائل پیشنهاد می دهد این است که یک Interface برای هر نوع محصول صرف نظر از سبک های آن ایجاد شود. مثلا در این مثال باید سه Interface برای مبل، کاناپه و میز به صورت جداگانه تعریف شوند. سپس سبک های مختلف از این محصولات باید از این Interface ها پیروی کنند. به عنوان مثال، تمام مبل ها با هر سبکی که دارند باید Interface مبل را پیاده سازی (implement) کنند؛ این روند به همین صورت باید برای محصولات دیگر انجام شود.

کارخانه انتزاعی abstract factory design pattern

سپس باید در نرم افزار کارخانه ساخت محصولاتی را که از یک سبک هستند به صورت جداگانه تعریف شوند. برای این منظور نیاز به ایجاد یک Interface جدید خواهیم داشت که توابع و روش ساخت محصولات در آن تعریف می شوند. مثلا اگر نام کارخانه اصلی را کارخانه ساخت مبلمان در نظر گیریم، در این Interface توابع مربوط به ایجاد مبل، کاناپه و میز تعریف می شوند. همه این توابع باید یک محصول از نوع انتزاعی (Abstract) برگردانند. همچنین محصولاتی در این کارخانه ها تولید می شوند باید همگی محصولاتی باشند که به صورت Interface تعریف شده اند: مثلا مبل، کاناپه و میز.

الگوی طراحی کارخانه انتزاعی abstract factory design pattern

برای هر سبک از محصولات، باید یک کلاس کارخانه ساخته شود که از Interface کارخانه ساخت مبلمان پیروی می کند. بر این اساس هر کارخانه یک کلاس است که از یک interface برای دریافت توابع پیروی می کند و محصولاتی از یک نوع خاص را بر می گرداند. به عنوان مثال، کارخانه ساخت مبلمان مدرن تنها می تواند مبل مدرن، کاناپه مدرن و میز مدرن ایجاد کند.

نرم افزار باید به گونه ای طراحی شده باشد که حتما کارخانه ها و محصولات از Interface ها پیروی کنند. با این کار شما می توانید بدون اینکه نیازی به تغییر در کدهای اصلی نرم افزار داشته باشید، به راحتی در کارخانه و محصولات تغییر ایجاد کنید. از طرفی دیگر با این کار هر محصولی که توسط مشتری سفارش داده می شود، همیشه از لحاظ سبک با یکدیگر سازگار خواهند بود و دیگر از بابت نامتناسب بودن آن ها نگرانی نخواهد بود. زیرا کارخانه ها از لحاظ سبک تولیدی از یکدیگر متمایز شده اند.

کاربردهای الگوی طراحی کارخانه انتزاعی

 کارخانه انتزاعی abstract factory design pattern

زمانی که کاربر به صورت دقیق از نوع شی ای که می خواهد ایجاد کند اطلاع نداشته باشد، از این دیزاین پترن استفاده می شود. همچنین اگر در آینده به امکان افزوده شدن محصولاتی جدید با سبک های متفاوت وجود داشته باشد، به منظور جلوگیری از ایجاد تغییرات در کدهای نرم افزار و افزایش انعطاف پذیری آن از الگوی طراحی کارخانه انتزاعی استفاده می شود. این الگو 4 جز اصلی دارد که عبارتند از :

  • Abstract Factory : یک Interface است که ساختار کلی کلاس ها را تعریف می کند.
  • Concrete Factory : کلاسی است که محصولات مربوط به یک سبک را تعریف می کند.
  • Abstract Product : کلاسی است که ساختار و توابع محصولات قابل تولید توسط کارخانه را تعریف می کند.
  • Product : محصولات هستند که توسط کارخانه تولید می شوند.

پیاده سازی الگوی طراحی کارخانه انتزاعی

در این بخش به بررسی مراحل پیاده‌ سازی الگوی طراحی کارخانه انتزاعی می پردازیم، سپس با استفاده از زبان برنامه نویسی PHP این الگو را در قالب یک مثال پیاده سازی خواهیم کرد. مراحل پیاده سازی این الگو عبارتند از :

  1. ابتدا باید لیستی از انواع اشیای مورد نظر در نرم افزار تهیه شود.

  2. باید برای هر یک از انواع آن ها یک Interface تعریف شود. سپس تمام کلاس های این اشیا باید از این Interface ها پیروی کنند.

  3. در این گام Interface کارخانه انتزاعی باید ایجاد شود. در این Interface مجموعه ای از روش های ایجاد اشیا انتزاعی تعریف می شود.

  4. باید برای هر یک از اشیا که سبک مشابهی دارند کلاس های به عنوان کارخانه سازنده آن ها ایجاد شود. این کارخانه ها که اشیا مرتبط را تولید می کنند باید از Interface کارخانه انتزاعی پیروی کنند.

  5. کد مربوط به راه اندازی کارخانه را در نرم افزار باید نوشت. این کد باید یک کلاس کارخانه مرتبط را بسته باشد، بسته به پیکربندی برنامه یا محیط فعلی. این کارخانه را به کلیه کلاس هایی که محصولات را طراحی می کنند انتقال دهید.

  6. هر جایی در کدهای نرم افزار که اشیا به صورت مستقیم ایجاد شده اند، باید شناسایی شود. سپس آن ها با توابع ساخت مناسب با توجه به کارخانه مربوطه جایگزین شوند.

مثالی از الگوی طراحی کارخانه انتزاعی در دنیای واقعی

در این مثال، از الگوی کارخانه انتزاعی به منظور ایجاد یک کارخانه برای تولید انواع قالب های مختلف برای عناصر مختلف یک صفحه وب استفاده می شود. زیرا یک وبسایت قادر است از موتور های رندر مختلف به صورت همزمان پشتیبانی کند. به دلیل تفاوت در کدهای مربوط به هر یک از موتور های رندر قالب، ایجاد Template ها باید توسط کارخانه اختصاصی خود انجام شوند.

نتیجه گیری

الگوی کارخانه انتزاعی جزو دیزاین پترن های پر استفاده در برنامه نویسی است. بسیاری از فریم ورک ها و کتابخانه ها از این روش برای ارائه راه  حلی برای گسترش و سفارشی کردن اجزای خود استفاده می کنند. البته استفاده از این الگوی طراحی ممکن است باعث پیچیده شدن فرآیند کدنویسی شود. زیرا در این الگو از Interface ها و کلاس های جدیدی زیادی استفاده می شود. به نظر شما استفاده از این الگوی طراحی در چه نرم نوع افزارهایی نیاز می شود؟

متخصص PHP
اگر دوست داری برنامه نویسی PHP رو حرفه ای یاد بگیری آیا می دانید بیش از ۸۰% وب سایت های موجود در ایران از جمله لیدرهای بازار وب (اسنپ، اسنپ فود، نت برگ، دیجیکالا، الوپیک و ... ) زبان برنامه نویسی PHP را به عنوان زبان اصلی برای پیاده سازی امکانات سمت سرور خود انتخاب کردند! متخصص PHP arrow_back
7Learn Experts
comment دیدگاه کاربران
hamidreza replyپاسخ

خیلی کامل بود جالب بود!

add_circle ارسال دیدگاه

خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :