Table of Contents
معرفی الگوهای طراحی خلقی
الگوهای طراحی سازمانی فرایند فوری را انتزاعی می کنند، یک سیستم مستقل از چگونگی ایجاد، ساخت و نمایندگی آن در میان الگوهای GoF، تکتون و روش کارخانه دو مورد از اغلب با هم روبرو هستند، اما آنها اساسا مشکلات مختلف را حل می کنند، در حالی که روش کارخانه مسئولیت انتخاب که کلاس بتن به فوری تنظیم می کند، یا به طور دقیق تنظیم الگوی سخت و سخت برای هر نمونه، و یا غیر ضروری هدایت می کند.
الگوی تکتون در جزئیات
الگوی تکتون یک کلاس را به یک نمونه محدود می کند و نقطه جهانی دسترسی به آن مثال را فراهم می کند.این یکی از ساده ترین الگوهای است، اما همچنین یکی از بحث برانگیزترین ها به دلیل تاثیر آن بر قابلیت تست و اتصال است.
ویژگی های اصلی
- تضمین نمونه: سازنده خصوصی مانع از فوری سازی خارجی می شود.
- ] دسترسی جهانی: نمونه از هر نقطه در برنامه، اغلب از طریق یک متغیر استاتیک عمومی یا روش قابل دسترسی است.
- (فَلَهُمَهُمَهُمَهُمَهُمَهُمَهُمَهُمَهُمَهُوا مَنَاًاًاًاًاًاًاًاًاًاًاًاًاًاًاًاًاًاًاًاًاًاًاًاًاً وَهُمْمْهُوا مَهُوا مَهُوا مَهُوا مَهُوا مَهُمْمْمْمْمْمْمْمْهُوا مَهُوا مَهُمْهُمْهُمْمَهُوا مَهُوا مَهُوا مَهُمَهُمْهُمْهُمْهُوا مَهُمَهُمَهُمَهُمْهُمْهُوا مَهُمَهُمْنَهُمَهُوَهُوَ
وقتی تکتون مناسب است
- منابع به اشتراک گذاشته شده باید هماهنگ شوند: مدیران پیکربندی، استخرهای ریسمان، استخرهای اتصال، خدمات ورود و رانندگان رابط سخت افزار اغلب به یک کنترل کننده نیاز دارند.
- ] حالت جهانی که نباید تکرار شود: مدیران پنهان، لایه های انتزاع سیستم فایل، یا مدیران پنجره در چارچوب های GUI.
- اشیاء منبع: اشیا که برای ایجاد و استفاده از آن در سراسر سیستم از یک نمونه واحد گران هستند.
پیاده سازی
ایمنی Thread رایج ترین پیاده سازی ساده لوحی است که برای بررسی می شود و سپس نمونه را می تواند چندین مورد را در محیط های چند لایه ای تولید کند. Solutions شامل قفل دو چک شده با ، کلاس داخلی استاتیک (Bill Pugh تکton)، یا یک تکتون مبتنی بر enum در جاوا، در پایتون، نخ، استفاده از استاندارد سازی اولیه است که تضمین شده است و یا اینکه آیا تمایل به انتخاب تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک تک رنگ آن است.
انتقاد و سقوط
تکتون ها اغلب ضد مواد مخدر محسوب می شوند زیرا آنها حالت جهانی را معرفی می کنند که تست واحد را دشوار می کند - تست ها به ترتیب وابسته و سخت برای انزوا تبدیل می شوند؛ آنها همچنین وابستگی ها را پنهان می کنند؛ کلاسی که به آن ها می گوید (FLT:4) به طور مستقیم به کلاس بتنی تکتون متصل می شود. مدرن توصیه می کند که از تزریق به عنوان یک نمونه مشترک استفاده کند، به یک فرآیند جایگزینی واحد (به علاوه، به یک سیستم تجزیه و تحلیل های کوچک).
الگوی روش کارخانه در جزئیات
الگوی روش کارخانه یک رابط برای ایجاد یک شی تعریف می کند اما اجازه می دهد زیر کلاس ها تصمیم بگیرند که کدام کلاس را به فوری تبدیل می کند.این مسئولیت ایجاد شی از مشتری به یک روش کارخانه را تغییر می دهد و اصول باز / بسته را ترویج می کند.
ویژگی های اصلی
- منطق آفرینش را محدود می کند: کد مشتری طبقه ی بتنی را نمی شناسد؛ آن را از طریق یک نوع محصول انتزاعی کار می کند.
- قابلیت: انواع محصول جدید را می توان با ایجاد کارخانه های بتنی جدید بدون تغییر کد مشتری موجود اضافه کرد.
- [[۱] [۱۰] [۱۰] [۱۰] [۱۰] [۱۰] [۱]] [۱۰] [۱] [۱] [۱] [۱]] [۵] [۵] [۵] [۵] [۵]] [۵] [۵] [۵] [۵] [۵] [۵] [۱] [۵] [۵] [۱] [۵] [۵] [۱] [۱] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵]]]]]] [۵] [۵] [۵] [بر [بر [۵] [بر [بر [بر [بر [بر [بر [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى
هنگامی که روش کارخانه مناسب است
- {FLT:1 هنگامی که یک سیستم نیاز به کار با تغییرات محصول چندگانه که یک رابط مشترک به اشتراک می گذارد - به عنوان مثال، رانندگان پایگاه داده مختلف، فرمت های صادرات سند، یا تم های UI.
- کد مشتری را از پیاده سازی های بتنی جدا کنید: مشتری روش کارخانه را می نامد و یک شی را مطابق با یک رابط انتزاعی دریافت می کند.
- ایجاد مبتنی بر درک: برنامه می تواند در استارت آپ تصمیم بگیرد که کارخانه بتن برای استفاده بر اساس یک فایل پیکربندی، متغیر محیط زیست یا شرایط زمان اجرا.
پیاده سازی
یک روش کارخانه معمولی از یک کلاس انتزاعی (FLT:5) استفاده می کند که روش کارخانه (اغلب انتزاعی) را اعلام می کند، سازندگان بتن این روش را برای فوری کردن محصولات خاص، به زبان های بدون ارث (به عنوان مثال، جاوا اسکریپت)، کارخانه می تواند یک تابع یا یک بسته شدن باشد. الگوی به خوبی با ظروف تزریق وابستگی کار می کند که می تواند جایگزین پیاده سازی های معمول باشد (Fase: F).
مثال واقعی جهان: Document Converter
در نظر بگیرید که در میان فرمت ها، یک رابط کاربری انتزاعی (FLT:7) یک روش را مشخص می کند. یک تابع (FLT:10) را باز می گرداند، یا بر اساس پسوند ورودی، اضافه کردن یک فرمت جدید (به عنوان مثال، مارک معکوس) تنها نیاز به به به روز رسانی سیستم جدید دارد - و تغییرات تبدیل سیستم.
مقایسه مستقیم: تکتون در مقابل روش کارخانه
اگرچه هر دو الگوی خلقی هستند، اهداف و اخراج های تجاری آنها تقریباً یاتاگونال هستند.
| Aspect | Singleton | Factory Method |
|---|---|---|
| Primary goal | Ensure a single instance | Encapsulate object creation |
| Instance count | Exactly one | Many instances, but created through a factory |
| Control over class selection | Not relevant (always same class) | Subclasses or runtime logic choose the concrete class |
| Impact on maintainability | Can increase coupling (global access) | Reduces coupling (client depends on abstraction) |
| Testability | Often problematic (global state) | Good, as factories can be mocked |
| Extensibility | Limited (hard to subclass a singleton) | High (new products via new factories) |
انتخاب تکتون زمانی که نگرانی بیش از حد شما منحصر به فرد بودن و هماهنگی جهانی است - به عنوان مثال، یک سرویس ورود که باید به یک فایل واحد ارسال کند، انتخاب روش کارخانه زمانی که تمرکز شما بر ایجاد شی از کد مشتری و اجازه سیستم برای رشد با انواع محصول جدید است - به عنوان مثال، یک ابزار GUI که نیاز به ارائه دکمه های بومی در سیستم عامل های مختلف دارد.
وقتی که از آن استفاده می کنند (و در صورت استفاده از آن)
معمول است که یک تکتون به عنوان یک کارخانه (به عنوان مثال، یک تکتون (FLT13) را ببینید که می داند چگونه اشیاء مختلف را ایجاد کند) این رویکرد هر دو الگو را ترکیب می کند اما معایب حالت جهانی را به ارث می برد.یک جایگزین بهتر این است که وابستگی کارخانه را تزریق کند و خود را به عنوان یک کلاس ساده نگه دارد - تکتون اغلب انتخاب اشتباه برای اجرای کارخانه است اگر یک الگوی استفاده از طریق یک نمونه می تواند به اشتراک گذاری در مورد استفاده از یک نمونه از طریق یک نمونه از آن در مورد استفاده از طریق یک سیستم عامل باشد.
بررسی های عملی برای برنامه های مدرن
تست و وابستگی تزریق
هر دو الگو با آزمایش به روش های مختلف تعامل دارند. تکتون ها به طور بدنامی در تست های واحد جایگزین می شوند.یک محیط کاری مشترک این است که رابطی را برای تکتون معرفی کرده و دو بار تست ارائه دهند، اما این امر سادگی کارخانه الگو را تضعیف می کند، از سوی دیگر، به راحتی با ارائه یک کارخانه مسخره در آزمون ها جایگزین می شوند.
سیستم های توزیع شده و Concurrency and Distributed Systems
تکتون در سیستم های توزیع شده از بین می رود، زیرا "یک نمونه" نمی تواند چندین فرآیند یا گره را برای منابع مشترک در سراسر میکروسرویس ها، مهندسان از پایگاه های داده مشترک، حافظه هایی مانند قرمزیس یا انتخابات رهبر استفاده کند - نه الگوی کارخانه تکتون حتی در زمینه های توزیع شده قابل اجرا است؛ بلکه به سادگی اشیاء را در هر مرز خدمات ایجاد می کند.
ترکیب الگوهای برای راه حل های واقعی جهانی
بسیاری از سیستم های تولیدی این الگوها را به صورت هوشمند ترکیب می کنند، مثلاً یک استخر اتصال (FLT:1) ممکن است از یک روش کارخانه برای ایجاد انواع مختلف اتصالات استفاده کند (به عنوان مثال، فقط خواندن در مقابل خواندن-Write) تکتون یک استخر را در هر برنامه تضمین می کند، در حالی که روش کارخانه ایجاد یک نمونه دیگر از اشیاء را مدیریت می کند.
اشتباهات رایج برای اجتناب از
- هنگامی که یک کارخانه کفایت می کند، تکتون را به کار می برید؛ اگر شما فقط یک نمونه از یک کلاس را به دلایل عملکردی می خواهید، تزریق وابستگی با یک دامنه تکتون تمیزتر از یک دسترسی جهانی است.
- روش کارخانه ای که ایجاد شی بی اهمیت و ثابت است؛ اگر نوع شی هرگز تغییر نکند و زیر کلاس نداشته باشد، یک سازنده ساده واضح تر است.
- اتصال بین خانواده های کارخانه و محصول: [FLT 1] اجتناب از قرار دادن پیکربندی یا منطق کسب و کار در داخل روش کارخانه که باید در جای دیگر تعلق داشته باشد.
- برای حفظ امنیت رشته در تکتون ها: در محیط های سرور، یک تکتون غیر قابل خواندن می تواند حالت فاسد را در زمان تولید کند.
نتیجه گیری
تکتون و روش کارخانه اساسا نقش های مختلف در طراحی نرم افزار را اجرا می کنند. تکتون یک نمونه واحد برای هماهنگی جهانی را اجرا می کند؛ ساخت روش کارخانه برای حمایت از تنوع زمان و عدم توانایی و انتخاب بین آنها نیاز به ارزیابی اینکه آیا نگرانی اولیه شما منحصر به فرد یا انعطاف پذیری است - هر کدام یک گلوله نقره ای است - هر کدام از آنها را معرفی می کند در آزمون، و پیچیدگی مدرن، و درک آنها اغلب می تواند محدودیت های وابستگی را به طور عمدی اعمال کند.
برای خواندن بیشتر، الگوهای کلاسیک GoF را در Refactoring.Guru و را ببینید همچنین تجزیه و تحلیل زبان مارتین Fowler را در نظر بگیرید Registry به عنوان یک جایگزین برای تکتون و اجرای مقاله خاص در مورد استفاده از زبان های خاص [F6LT:6]