singleton در کاتلین:
در کاتلین، سینگلتونها با استفاده از کلمه کلیدی object
ایجاد میشوند. این کار تضمین میکند که تنها یک نمونه از شیء ایجاد شده و در سراسر برنامه استفاده میشود.
(Thread Safety) در سینگلتونهای کاتلین:
Thread Safety در سینگلتونهای کاتلین به این معناست که وقتی یک شیء سینگلتون ایجاد میشود، حتی اگر چندین رشته (Thread) همزمان بخواهند به آن دسترسی پیدا کنند، مشکلی پیش نخواهد آمد. کاتلین این فرآیند را بهطور خودکار مدیریت میکند و اطمینان میدهد که تنها یک نمونه از سینگلتون در زمان اجرای برنامه ساخته شود، حتی اگر دسترسی همزمان از چندین بخش برنامه صورت بگیرد.
به عبارت دیگر، در زبانهای برنامهنویسی معمولاً وقتی چندین رشته بخواهند به یک منبع مشترک دسترسی داشته باشند، احتمال ایجاد مشکل وجود دارد مگر اینکه خود برنامهنویس مکانیزمهایی برای جلوگیری از این تداخل پیادهسازی کند. اما در کاتلین، برای سینگلتونها نیازی به این کار نیست. کامپایلر به طور خودکار از Thread Safety برای ایجاد و مدیریت سینگلتونها اطمینان حاصل میکند، به طوری که فقط یک نمونه از شیء ایجاد و استفاده شود، بدون نگرانی از ایجاد تداخلهای احتمالی در زمان دسترسیهای همزمان.
در مثال بالا، شیء سینگلتون به صورت Thread-safe مقداردهی اولیه میشود. بلوک init فقط یک بار اجرا خواهد شد، صرف نظر از اینکه چند رشته همزمان در حال تلاش برای دسترسی به شیء سینگلتون باشند. این بدان معناست که حتی اگر چندین رشته بخواهند به طور همزمان به شیء دسترسی پیدا کنند، فرآیند مقداردهی اولیه تنها یک بار انجام میشود و تمامی دسترسیهای بعدی به همان نمونه اولیه هدایت میشوند.
(Objects) در کاتلین و (Thread Safety):
در کاتلین، یک Object اساساً یک سینگلتون است. ویژگیهای Thread Safety که برای سینگلتونها توضیح داده شد، به تمامی اشیایی که با استفاده از کلمه کلیدی object
در کاتلین تعریف میشوند، اعمال میشود. این بدان معناست که هر شیء ایجاد شده با کلمه کلیدی object
به طور ذاتی Thread Safety است و نیازی به اقدامات اضافی برای اطمینان از Thread Safety وجود ندارد.
تفاوت بین Singleton و Object:
در کاتلین، کلمه کلیدی مستقیمی برای "سینگلتون" وجود ندارد؛ به جای آن، از کلمه کلیدی object
برای ایجاد کلاسهای تکنمونهای (Single-instance) استفاده میشود که در عمل سینگلتون هستند. بنابراین، یک Object در کاتلین به طور طبیعی سینگلتون است و هر دو اصطلاح "singleton " و "Object" را میتوان به صورت متناوب در کاتلین استفاده کرد.
یک مثال از Object:
Thread Safety در object کاتلین:
همانطور که قبلاً ذکر شد، کاتلین اطمینان میدهد که شیء ای مانند NetworkManager به صورت Thread Safety مقداردهی اولیه میشود. شما میتوانید با اطمینان از چندین رشته به تابع ()sendRequest فراخوانی انجام دهید، بدون نگرانی از ایجاد چندین نمونه یا مشکلات مربوط به مقداردهی اولیه همزمان.
ایمنی رشتهای با مقداردهی اولیه به روش Lazy
اگر نیاز به کنترل بیشتری بر روی مقداردهی اولیه سینگلتون خود دارید، میتوانید از مکانیزم Lazy در کاتلین استفاده کنید. این ویژگی به شما اجازه میدهد تا منطق مقداردهی اولیه را تعریف کرده و اطمینان حاصل کنید که Thread Safety بر اساس نیازهای شما رعایت شود. با استفاده از Lazy، مقداردهی اولیه تنها زمانی انجام میشود که برای اولین بار به شیء دسترسی پیدا شود، و کاتلین به صورت خودکار Thread Safety را مدیریت میکند.
در این مثال، نمونهی MySingleton به صورت Lazy و به شکل Thread Safety با استفاده از LazyThreadSafetyMode.SYNCHRONIZED مقداردهی اولیه میشود. این حالت از Synchronization اطمینان حاصل میکند که در صورت دسترسی همزمان از چندین رشته، تنها یک نمونه از MySingleton ایجاد خواهد شد و فرآیند مقداردهی اولیه به صورت Thread Safety مدیریت میشود.
این روش ایدهآل برای زمانی است که میخواهید سینگلتون فقط در زمان نیاز مقداردهی اولیه شود و در عین حال Thread Safety را تضمین کنید.
نتیجهگیری:
طراحی کاتلین ایجاد سینگلتونها و object های Thread Safety را ساده کرده و پیچیدگی و خطاهای احتمالی مرتبط با synchronization را کاهش میدهد.
ممنون که تا آخر این پست همراه من بودید ، امیدوارم براتون مفید بوده باشه 🙌🙏✌ (:
بقیه آموزش های من با نام (mister developer) را می توانید در تلگرام و اینستاگرام دنبال کنید!!
کانال تلگرام: mister_developerr
اینستاگرام: mister_developerr
موفق و پیروز باشید