نمونه اولیه (prototype) mahdi.sg مرداد ۲۴, ۱۴۰۳

نمونه اولیه (prototype)


هـــدف
نمونه اولیه یک الگوی طراحی خلاقانه است که به شما امکان می‌دهد، اشیاء موجود را بدون اینکه کدهای شما به کلاس‌های آن‌ها وابسته باشد، کپی کنید.
Prototype Design Pattern
مـسئـــلـه

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

خوب است! اما یک مشکل وجود دارد. همه اشیاء را نمی‌توان به این روش کپی کرد زیرا برخی از فیلدهای شی ممکن است خصوصی باشند و از خارج از خود شی قابل مشاهده نباشند.

What can go wrong when copying things “from the outside"?” width=کپی کردن یک شی “از بیرون” همیشه امکان پذیر نیست.

مشکل دیگری نیز با رویکرد مستقیم وجود دارد. از آنجایی که برای ایجاد یک نسخه تکراری باید کلاس شی را بدانید، کد شما به آن کلاس وابسته می‌شود. اگر وابستگی اضافی شما را نمی‌ترساند، یک مشکل دیگر نیز وجود دارد. گاهی اوقات شما فقط رابطی را که شی از آن پیروی می‌کند می‌دانید، اما کلاس مشخص آن را نمی‌دانید، مثلاً زمانی که یک پارامتر در یک متد هر شیئی را که از یک رابط پیروی می‌کند می‌پذیرد.

الگوی نمونه اولیه فرایند کپی‌برداری را به خود اشیاء مورد کپی‌برداری واگذار می‌کند. این الگو یک رابط مشترک برای تمام اشیایی که از کپی‌برداری پشتیبانی می‌کنند، اعلام می‌کند. این رابط به شما امکان می‌دهد بدون اتصال کد خود به کلاس آن شی، یک شی را کپی کنید. معمولاً چنین رابطی تنها یک متد کپی دارد.

پیاده‌سازی متد کپی در همه کلاس‌ها بسیار مشابه است. این متد یک شی از کلاس فعلی ایجاد می‌کند و تمام مقادیر فیلدهای شی قدیمی را به شی جدید منتقل می‌کند. حتی می‌توانید فیلدهای خصوصی را کپی کنید زیرا اکثر زبان‌های برنامه‌نویسی به اشیاء اجازه می‌دهند تا به فیلدهای خصوصی سایر اشیایی که متعلق به همان کلاس هستند دسترسی داشته باشند.

شیئی که از کپی‌برداری پشتیبانی می‌کند، نمونه اولیه نامیده می‌شود. هنگامی که اشیاء شما دارای ده‌ها فیلد و صدها پیکربندی ممکن هستند، کپی کردن آن‌ها ممکن است به عنوان جایگزینی برای زیرکلاسی‌سازی عمل کند.

Pre-built prototypesنمونه های اولیه از پیش ساخته شده می توانند جایگزینی برای طبقه بندی فرعی باشند.

به این صورت کار می‌کند: شما مجموعه‌ای از اشیاء را با پیکربندی‌های مختلف ایجاد می‌کنید. هنگامی که به شیئی مانند شی پیکربندی شده نیاز دارید، به جای ساختن یک شی جدید از ابتدا، یک نمونه اولیه را کپی می‌کنید.

The structure of the Prototype design pattern
اجرای نمونه اولیه رجیستری
The prototype registry
برای مطـالعـه متن کامل مقالــه، مجموعه کــــدها، نحوه پیاده سازی، مزایا و معایب و روابط با الگوهای دیگر، ایــنــجـــا کلیک کنید.