این مقاله برای کسانی است که برای اولین بار با مفهوم الگوهای طراحی مواجه می شوند، اصطلاح تک تن را شنیده اند یا به نوعی الگوی تک تن را اجرا کرده اند اما متوجه نشده اند که چه اتفاقی در حال رخ دادن است. خوش آمدی! دانش آموزان CodeGym برای اولین بار در سطح 15 با الگوهای طراحی مواجه می شوند، زمانی که کاپیتان به طور غیرمنتظره از آنها می خواهد که درک خود را با اجرای الگوی جاوا سینگلتون با اجرای تنبل "تقویت" کنند. دانش آموزانی که برای اولین بار در مورد الگوی تکی می شنوند بلافاصله سؤالات زیادی دارند: الگوی طراحی در دنیا چیست؟ چرا ما به اون احتیاج داریم؟ تک قلو چیست ؟ و در نهایت اجرای تنبلی چیست؟ بیایید به ترتیب به این سوالات پاسخ دهیم.
و الگوی تک تن فقط یکی از آنهاست.
با بلک جک و اعداد ایجاد کنید و زمان زیادی را صرف این کار کنید، یا می توانید الگوریتمی را پیاده سازی کنید که برای مدت طولانی درک و توصیف شده است. در مورد الگوهای طراحی هم همینطور است. علاوه بر این، با الگوهای طراحی، کد استانداردتر میشود، و هنگام استفاده از الگوی مناسب، احتمال کمتری وجود دارد که اشتباه کنید، زیرا مشکلات رایج الگو مدتها پیش شناسایی و حذف شدند. علاوه بر همه چیز، دانش الگوها به برنامه نویسان کمک می کند تا یکدیگر را بهتر درک کنند. شما می توانید به سادگی نام یک الگو را بگویید و در عوض سعی کنید توضیحی طولانی برای برنامه نویسان دیگر ارائه دهید. به طور خلاصه، الگوهای طراحی به شما کمک می کند:
برای پایان دادن به این بخش، متذکر می شویم که کل بدنه الگوهای طراحی را می توان به سه گروه بزرگ تقسیم کرد:
الگوی طراحی در دنیا چیست؟
من معتقدم کمی تاریخ برای پاسخ به این سوال با بهترین درک است. چهار نویسنده معروف برنامه نویسی (اریش گاما، جان ولیسیدز، رالف جانسون و ریچارد هلم) هستند که ایده جالبی را ارائه کردند. آنها متوجه شدند که توسعه نرم افزار اغلب آنها را ملزم می کند که تقریباً همان مشکلات را حل کنند و کدهایی را با ساختار مشابه بنویسند. بنابراین آنها تصمیم گرفتند الگوهای معمولی را توصیف کنند که اغلب باید در برنامه نویسی شی گرا مورد استفاده قرار گیرند. کتاب آنها در سال 1994 با عنوان Design Patterns: Elements of Reusable Object-Oriented Software منتشر شد. معلوم شد که نام کتاب خیلی طولانی است و مردم به سادگی آن را کتاب گروه چهار نفر می نامند. نسخه اول شامل 23 الگو بود. پس از آن، ده ها الگوی دیگر کشف شد. پس اجازه دهید پاسخ سوال این بند (الگوهای طراحی در دنیا چیست؟) را در چند کلمه خلاصه کنیم:الگوی طراحی یک راه حل استاندارد شده برای یک مشکل رایج است. |
چرا به الگوهای طراحی نیاز داریم؟
شما میتوانید بدون دانستن الگوها برنامهنویسی کنید: به هر حال، در سطح 15، صدها برنامه کوچک در CodeGym نوشتهاید بدون اینکه حتی از وجود آنها اطلاع داشته باشید. این نشان میدهد که الگوهای طراحی نوعی ابزار هستند که استفاده از آن استاد را از آماتور متمایز میکند: الگوهای طراحی چگونگی حل صحیح یک مشکل معمولی را توصیف میکنند. این بدان معنی است که دانستن الگوها در زمان شما صرفه جویی می کند. به این ترتیب آنها شبیه الگوریتم ها هستند. به عنوان مثال، می توانید الگوریتم مرتب سازی خود را
|

در نهایت الگوی تک تن
سینگلتون یک الگوی آفرینشی است . این الگو تضمین می کند که تنها یک نمونه از یک کلاس وجود دارد و یک نقطه دسترسی جهانی برای این شی فراهم می کند. از توضیحات، باید مشخص شود که این الگو باید در دو مورد اعمال شود:- زمانی که برنامه شما نیاز دارد که بیش از یک شی از یک کلاس خاص ایجاد نشود. به عنوان مثال، یک بازی کامپیوتری ممکن است یک کلاس Hero و فقط یک شی Hero داشته باشد که تنها قهرمان بازی را توصیف کند.
- زمانی که باید نقطه ای برای دسترسی سراسری به یک شی فراهم کنید. به عبارت دیگر، شما باید شی را از هر جایی در برنامه در دسترس قرار دهید. افسوس، ایجاد یک متغیر سراسری به سادگی کافی نیست، زیرا محافظت از نوشتن ندارد: هر کسی میتواند مقدار متغیر را تغییر دهد، بنابراین ممکن است نقطه دسترسی جهانی شیء از بین برود. این ویژگی های یک Singleton ضروری است، برای مثال زمانی که شما یک شی دارید که با یک پایگاه داده کار می کند و باید از قسمت های مختلف برنامه به پایگاه داده دسترسی داشته باشید. یک Singleton تضمین می کند که هیچ کس کدی را که جایگزین نمونه ایجاد شده قبلی شود، ننویسد.
-
نمونه ای از Singleton را با مقدار دهی اولیه تنبل پیدا کنید.
-
با استفاده از همین اصل، سه کلاس singleton - خورشید، ماه، زمین - در فایلهای جداگانه ایجاد کنید.
-
پیاده سازیسیارهرابط در کلاس های خورشید ، ماه و زمین .
- در بلوک استاتیک از کلاس Solution ، را فراخوانی کنیدreadKeyFromConsoleAndInitPlanetروش.
-
را اجرا کنیدreadKeyFromConsoleAndInitPlanetعملکرد روش:
-
5.1. یک پارامتر String را از کنسول بخوانید
-
5.2. اگر پارامتر برابر با یکی ازسیارهثابت های رابط، شی سیاره مناسب ایجاد کنید .
-
-
شما باید به کلاس یک فیلد ثابت خصوصی بدهید که یک شی واحد را ذخیره می کند:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; // #1 }
-
سازنده (پیشفرض) را خصوصی کنید. این بدان معنی است که خارج از کلاس قابل دسترسی نیست و نمی تواند اشیاء جدید را برگرداند:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton(){} // #2 }
-
یک روش ایجاد ایستا را اعلام کنید که برای بدست آوردن تک تون استفاده می شود:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton() {} public static LazyInitializedSingleton getInstance() { // #3 if (instance == null) { // If the object has not yet been created instance = new LazyInitializedSingleton(); // Create a new object } return instance; // Return the previously created object } }
GO TO FULL VERSION