campaign-off40

شناخت الگوی طراحی کارخانه یا Factory Method



visibility  
mode_comment   ۰

تا کنون 23 الگوی طراحی برای رفع مشکلات متداول در برنامه نویسی شی گرا توسعه داده شده است که یکی از آن ها الگوی طراحی کارخانه یا Factory Method است. الگوی طراحی کارخانه در دسته الگوهای طراحی سازنده یا Creational قرار دارد و به شما در مدیریت ایجاد اشیا کمک می کند. در ادامه این مقاله با الگوی طراحی Factory Method آشنا خواهیم شد و خواهیم دید چه زمانی استفاده از این الگوی طراحی در کدنویسی به کمک ما خواهد آمد.

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

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

الگوی طراحی Factory

در بعضی موارد اپلیکیشن های ما بسیار بزرگ و پیچیده هستند و یا در آینده گسترش خواهند یافت. معمولا این اپلیکیشن ها دارای تعداد خیلی زیادی کلاس (Class) هستند که از همه آن ها نمونه و شی (Object) ساخته می شود. تصور کنید که اپلیکیشن شما دارای 500 کلاس باشد که از هر کدام از آنها باید به صورت میانگین 10 شی و نمونه ساخته شود. بنابراین در نرم افزار حدود 5000 هزار شی از کلاس ها مختلف ساخته شده است. مثلا کلاسی مثل User که در سرتاسر اپلیکیشن مورد استفاده قرار می گیرد.

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

مثلا برای ساخت شی ها و نمونه هایی از کلاس User از Userfactory استفاده می کنیم. با این کار اگر نیاز به اعمال تغییراتی در کلاس مورد نظر خود داشته باشیم، کافی است تغییرات در کارخانه یا Factory مربوط به آن کلاس اعمال کنیم. پس از این عمل، تغییرات اعمال شده توسط کارخانه بر تمام کلاس های ساخته شده در آن، لحاظ می شوند.

مثالی از کاربرد الگوی طراحی Factory

factory method الگوی طراحی فکتوری

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

الگوی طراحی نرم افزاری کارخانه factory

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

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

کاربرد این الگوی طراحی برای شرایطی است که چندین کلاس ما از یک کلاس دیگر ارث بری کرده باشند و معمولا از آن کلاس نمونه یا شی ساخته می شود. همچنین این الگوی طراحی در موارد دیگر هم نیز استفاده می شود. این موارد عبارتند از :

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

پیاده سازی الگوی طراحی Factory

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

  1. ابتدا باید یک Interface تعریف کنیم که در آن توابعی تعریف شود که در همه اشیا مشترک و کاربردی است. سپس تمام اشیا باید از یک Interface پیروی کنند.
  2. باید یک تابع به عنوان کارخانه سازنده (Factory) آن شی در کلاسش اضافه شود. نوع متغیری که این تابع Return می کند باید با Interface که در بخش قبل ساخته شد، مطابقت داشته باشد.
  3. در کدهای نوشته شده هرجایی که اشیا توسط روش سنتی (به وسیله کیورد new) ایجاد شده اند باید پیدا شوند و برای ساخت آن ها از تابع کارخانه سازنده آن ها استفاده شود.
  4. باید مجموعه ای از کلاس های فرزند سازنده (creator) برای انواع اشیایی که کارخانه می سازد، تعریف شوند. سپس در این کلاس ها باید تابع کارخانه بازنویسی (Override) شود تا اصولی که در این تابع تعریف شده اند، به شکل مورد نیاز تغییر داده شوند. مثلا اگر در نحوه ساخت یک خودروی سواری و خودروی باربری تفاوتی وجود دارد، در کلاس های مربوط به خود این موضوع در نظر گرفته شود.
  5. اگر انواع مختلف و زیادی از اشیا وجود دارند که از نظر شما ساختن کلاس های فرزند برای همه آن ها منطقی به نظر نمی رسد و دارای ویژگی های مشترکی هستند، می توانید آن ویژگی را در کلاس والد وارد کنید و از تعریف مکرر آن در کلاس های فرزند خودداری کنید.
  6. اگر مشاهده کردید میان اشیای ساخته شده توسط تابع کارخانه هیچ ویژگی مشترکی وجود ندارد و تابع کارخانه خالی مانده است، می توانید آن را به صورت abstract تعریف کنید. همچنین اگر خلاف این امر صادق بود و ویژگی در این تابع باقی ماند، آن ویژگی را می توان، یک ویژگی پیشفرض برای اشیا در نظر گرفت.

نتیجه گیری

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

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

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

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