درک سه الگوی آفرینشی هسته ای

الگوهای طراحی نرم افزار طرح های آزمایش شده برای حل مشکلات طراحی تکراری هستند.در میان اغلب موارد استفاده شده الگوهای خلقی -Singleton، Factory و Prototype - هر کدام از آنها که چگونه اشیاء فوری هستند، انتخاب راست به طور مستقیم بر حفظ کد، عملکرد و مقیاس پذیری تأثیر می گذارد، این راهنمای گسترش یافته به عمق هر الگوی، کشف سناریوهای واقعی و عملی که شما را قادر می سازد تا یک تصمیم گیری آگاهانه را انجام دهید.

الگوی تکتون: یک نمونه برای قانون همه

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

چگونه تکتون کار می کند

به طور معمول، یک کلاس تکتون دارای یک سازنده خصوصی و یک روش استاتیک است که نمونه را برمی گرداند. اولین تماس، شیء را ایجاد می کند؛ تماس های بعدی در محیط های چند منظوره استفاده می شوند، هماهنگ سازی برای جلوگیری از شرایط نژادی که می تواند چندین مورد ایجاد کند، مورد نیاز است.

public class DatabaseConnectionPool {
 private static DatabaseConnectionPool instance;
 private DatabaseConnectionPool() { /* initialization */ }
 public static synchronized DatabaseConnectionPool getInstance() {
 if (instance == null) {
 instance = new DatabaseConnectionPool();
 }
 return instance;
 }
}

وقتی تکتون شین

  • مدیریت منابع مشترک: استخر اتصال، خدمات ورود به سیستم، و یا یک مدیر پیکربندی از یک نقطه هماهنگی بهره مند می شود.
  • ] [ [FLT: 1 ] هنگامی که یک حافظه یا رجیستری نیاز به دسترسی مداوم دارد.
  • سخت افزار یا منابع سطح سیستم عامل: سیستم های فایل، پرینتر spoolers، یا مدیران پنجره به طور معمول تنها یک نمونه را اجازه می دهند.

قرص های معمولی برای جلوگیری از

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

علی رغم این نقص ها، تکتون زمانی مفید است که شما واقعا به یک شی در سطح جهانی نیاز دارید تا درک عمیق تری داشته باشید، راهنمای تکتون Guru را مجدداً فعال کنید.

الگوی کارخانه: تسلیم آفرینش جسم

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

روش کارخانه در جزئیات

یک رابط برای ایجاد یک شی تعریف کنید، اما اجازه دهید زیر کلاس ها نوع اشیاء را که ایجاد می شوند تغییر دهند.برای مثال، یک کلاس گفتگو ممکن است یک روش (FLT:1) داشته باشد. زیر کلاس هایی مانند WindowsDialog و LinuxDialog این روش را برای بازگرداندن دکمه های خاص پلت فرم، نادیده بگیرند.

abstract class Dialog {
 abstract Button createButton();
 public void render() {
 Button okButton = createButton();
 okButton.onClick();
 }
}
class WindowsDialog extends Dialog {
 Button createButton() { return new WindowsButton(); }
}

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

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

کارخانه انتزاعی: تولید خانواده های اشیاء مرتبط

کارخانه انتزاعی یک رابط برای ایجاد خانواده های اشیاء مرتبط یا وابسته بدون مشخص کردن کلاس های بتنی خود فراهم می کند.در مورد یک ابزار GUI که باید دکمه ها، چک باکس ها و اسکرول هایی را تولید کند که تحت یک موضوع مشخص (به عنوان مثال، مواد، Cupertino) سازگار هستند، مشتری از یک رابط کارخانه انتزاعی برای به دست آوردن محصولات، و کارخانه های بتونی (کارکار، فنجانینو) استفاده می کند.

این الگو زمانی ترجیح داده می شود که:

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

تصمیم گیری بین کارخانه و دیگر الگو ها

کارخانه شما در هنگام ایجاد شی پیچیده است یا زمانی که شما نیاز به مبادله دارید (در زمان اجرا) انعطاف پذیر تر از تکتون است زیرا تعداد موارد را محدود نمی کند – این تنها بر اساس ساخت و ساز کارخانه (به جای نمونه: 1) کارخانه موارد جدیدی را از ابتدا ایجاد می کند تا نسخه ای از انواع موجود را کپی کند.

الگوی نمونه: Clone به جای ساخت

الگوی نمونه اولیه اشیاء جدید را با کپی کردن یک شیء موجود ایجاد می کند - نمونه اولیه آن به ویژه ارزشمند است زمانی که فوری سازی گران است (به عنوان مثال، پرس و جو پایگاه داده سنگین، محاسبات هندسی پیچیده) یا هنگامی که پیکربندی شی زمان گیر است به جای ساخت از ابتدا، شما یک نمونه از پیش پیکربندی و اصلاح آن را به عنوان مورد نیاز.

دانلود بازی Cloning Mechanics: Shouldow vs. Deep Copy

اکثر زبان های برنامه نویسی یک روش کلونی داخلی ( را در جاوا پیشنهاد می دهند، در پایتون، یا در جاوا اسکریپت گسترش می یابد، با این حال، توجه دقیق باید به این که آیا کپی کم عمق است (به اشتراک گذاشته شده به اشیاء قابل تغییر) یا عمیق (به طور مستقل).

class MazePrototype {
 public MazePrototype clone() throws CloneNotSupportedException {
 return (MazePrototype) super.clone(); // shallow copy
 }
}

سناریوهای ایده آل برای Prototype

  • ایجاد یک شیء پیچیده [به عنوان مثال]؛ بارگذاری یک پیکربندی بزرگ از یک فایل یا ایجاد یک حلقه هندسی پیچیده.
  • اشیاء زمان اجرا: هنگامی که سیستم باید اشیاء جدیدی را تولید کند که انواع آنها در زمان اجرا تعیین می شود (به عنوان مثال، انواع دشمن در یک بازی که از قالب های از پیش تعریف شده ایجاد می شود).
  • کاهش زیر کلاس: [FLT 1] به جای ایجاد بسیاری از زیرکلاس ها برای تغییرات جزئی، شما نمونه اولیه را کلون کرده و چند ویژگی را تنظیم می کنید.

Prototype Registry و Caching

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

مقایسه جانبی با روش: تکتون، کارخانه، Prototype

برای کمک به انتخاب، جدول زیر تفاوت های کلیدی را برجسته می کند:

PatternInstance CountCreation MechanismBest For
SingletonExactly oneSelf-managed global accessShared resources, global state
FactoryMultiple instances (or families)Centralized creation logicDecoupling client from concrete classes, complex creation
PrototypeMultiple instances cloned from a templateCloning (shallow/deep copy)Expensive instantiation, runtime object generation

وقتی که الگوهای بیش از حد یا ترکیب

  • [FLT: 1] کارخانه می تواند خود را یک تکتون (به عنوان مثال، یک کارخانه انتزاعی در هر پلت فرم) باشد.این ترکیب دسترسی جهانی با ایجاد متمرکز است.
  • Prototype + Factory: یک رجیستر نمونه می تواند به عنوان یک کارخانه عمل کند - شما نمونه اولیه را به جای فراخوانی یک سازنده کلون می کنید، این به ویژه در توسعه بازی در هنگام تولید مواد مفید است.
  • Prototype + تکتون: یک شیء نمونه اولیه ممکن است یک تکتون به این معنی که تنها یک نمونه نمونه اولیه وجود دارد در هر نوع، هر چند کلون ها تکتون نیستند.

چارچوب تصمیم گیری عملی

هنگامی که با یک مشکل طراحی مواجه می شوید که خواستار یک الگوی خلقی است، از این سوالات به منظور:

  1. آیا من دقیقاً به یک نمونه در سراسر برنامه نیاز دارم؟ اگر بله، تکتون را در نظر بگیرید، اما مطمئن شوید که یک کشور مشترک در سطح جهانی واقعاً مورد نیاز است و این آزمون پذیری رنج نمی برد.
  2. آیا ایجاد یک مجتمع یا احتمالا تغییر می کند؟ اگر بله، از روش کارخانه یا کارخانه انتزاعی استفاده کنید، این به ویژه هنگامی مفید است که شما پیش بینی می کنید انواع جدید شی را بعدا اضافه کنید.
  3. آیا در این زمینه، به صورت زیر به صورت زیر به صورت زیر به کار می رود یا به صورت زیر به آن نیاز دارم؟ (اگر بله، نمونه می تواند زمان و حافظه را با جمع آوری یک الگو ذخیره کند).
  4. آیا بیش از یک الگو می تواند به همان هدف خدمت کند؟ ارزیابی معاملات -offs.

مثال های واقعی در مهندسی Software

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

نتیجه گیری: اجازه ندهید الگو ها طراحی شما را به کار گیرند

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

با تسلط بر این سه الگو، شما خود را با یک ابزار متنوع برای ساخت نرم افزار مهندسی قوی و انعطاف پذیر مجهز می کنید.برای مطالعه بیشتر، مقاله وikipedia را در الگوهای طراحی نرم افزار و refactoring Guru of Createal Pattern بررسی کنید.