الگوی طراحی پروتوتایپ Prototype چیست؟

دسته بندی: طراحی نرم‌افزار
5 دقیقه زمان مطالعه
1400/12/03
0 نظر

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

در این زمان فقط اولین شی ساخته می‌شود و می‌توانیم بدون دانستن جزئیات کلاس‌ها و درگیر شدن با جزئیات نمونه‌سازی، از متدهای آن استفاده کنیم. برای مثال تمام رنگ‌ها از سه مقدار RGB ساخته شده‌اند؛ برای تولید رنگ جدید، ما می‌توانیم از کلاسی که قبلا ایجاد نموده‌ایم استفاده کنیم و فقط مقدار صفت‌های RGB را تغییر دهیم. در این مقاله به بررسی الگوی طراحی Prototype و ویژگی‌های این الگو می‌پردازیم.

الگوی طراحی Prototype

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

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

در صورتی‌ که الگوی Prototype انعطاف‌پذیرتر است. ایده اصلی این الگو به این صورت است که برای ساخت نمونه از اشیا، به جای استفاده از دستور New در بخش‌های مختلف برنامه، از اولین شی ایجاد شده کپی‌برداری کنید؛ این کار باعث صرفه‌جویی در زمان و فضای استفاده شده برای برنامه می‌شود.

مزیت الگوی طراحی Prototype

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

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

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

روش‌های ایجاد کپی در الگوی طراحی پروتوتایپ

در این الگو دو روش برای ایجاد کپی داریم:

۱. Shallow Copy

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

۲. Deep Copy

یک کپی عمیق از شی خواهیم داشت؛ به‌ صورتی که تمام عضوها تکرار خواهند شد و عضوهایی که به صورت اشاره‌گر هستند، نه تنها اشاره‌گرها کپی می‌شوند، بلکه شی مورد اشاره نیز منتقل می‌شود.

ویژگی‌های الگوی طراحی Prototype

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

بنابر گفته GOF هدف از الگوی Prototype عبارت است از:

«استفاده از یک شی به ‌عنوان نمونه، نوع اشیا جدیدی که بایستی ساخته شوند را مشخص کرده و آن اشیا را با ساختن کپی‌های جدید از این نمونه ایجاد می‌کند.»

Class Diagram

نقش کلاس‌ها:

Prototype:

ارائه واسط برای تهیه کپی از خودش.

 

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

Concrete Prototype:

پیاده‌سازی عمل‌هایی برای تهیه کپی از خودش.

Client:

ایجاد شی به وسیله Prototype که یک کپی از خودش را می‌دهد.

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

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

جدول ۱: ویژگی‌های پروتوتایپ

عنوان

شرح

نام

Prototype Pattern

هدف

ساخت اشیا با استفاده از نمونه‌هایی از آن‌ها که به عنوان Prototype موجود است.

نام‌های دیگر

ندارد

کاربرد

زمانی از این الگو استفاده کنید که:

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

نتایج

مزایای این الگو:

  • ساده‌سازی و تسریع روند نمونه‌سازی از کلاس‌های بزرگ و سنگین.
  • به کلاینت اجازه استفاده از کلاس‌های مشخصی از برنامه را بدون هیچ اصلاح و تغییری می‌دهد.
  • امکان حذف و اضافه Prototypeها در زمان اجرا.
  • برای یک کلاس می‌توان چندین پروتوتایپ ایجاد کرد.
  • تعداد زیرکلاس‌ها را کاهش می‌دهد.

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

  • پیاده‌سازی منطق کپی، ساده نیست.
  • هر Prototype Subclass باید عملیات Clone را پیاده‌سازی کند، این عمل ممکن است مشکل باشد.

الگوهای مرتبط

  • Abstract Factory: می‌توانید در کارخانه‌ی انتزاعی برای نمونه‌سازی از محصول‌ها از الگوی Prototype استفاده کنید. به گونه‌ای که مجموعه‌ای از پروتوتایپ‌ها را ذخیره کنید و برای برگرداندن اشیا محصول از آن‌ها کپی بگیرید.
  • Flyweight: می‌توانید الگوی Prototype را در یک شی سبک ‌وزن جدید از آن استفاده کنید.

جمع‌بندی

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

امتیاز شما به این مقاله:
نویسنده:

مطالب مرتبط