کلاس Singleton در کاتلین

کلاس Singleton  در کاتلین
فهرست مقاله [نمایش]

    اگه بخوام که کلاس Singleton رو برایتان تعریف کنم اینگونه میگویم:

    Singleton یک الگوی طراحی نرم افزار است که تضمین می کند یک کلاس فقط یک نمونه داشته باشد و یک نقطه دسترسی global به آن کلاس توسط آن کلاس فراهم شود. الگوی Singleton تضمین می کند که فقط یک نمونه ایجاد می شود و می تواند به عنوان یک نقطه دسترسی بهش دسترسی داشته باشد و از این طریق از ایمنی موضوع اطمینان حاصل شود.

    در کد جاوا ، اینگونه خواهد بود:

    public class Singleton {
    
        private static Singleton instance;
    
        private Singleton() {
        }
    
        public static Singleton getInstance() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    

    اما کدهای بالا خطرناک است ، به ویژه اگر در موضوعات مختلف استفاده شود اگر دو thread به طور همزمان به این singleton دسترسی پیدا کنند ، می توان دو نمونه از این شی تولید کرد.

    class Singleton {
    
        private static Singleton instance = null;
    
        private Singleton() {
        }
    
        private synchronized static void createInstance() {
            if (instance == null) {
                instance = new Singleton();
            }
        }
    
        public static Singleton getInstance() {
            if (instance == null) createInstance();
            return instance;
        }
    }
    

    synchronized keyword اطمینان می دهد که هیچگونه دخالت نخی در هنگام ایجاد نمونه وجود ندارد.

    اگر می خواهید این کار را در Kotlin انجام بدهید ، کد به صورت زیر خواهد بود:

    class Singleton private constructor() {
    
        private object HOLDER {
            val INSTANCE = Singleton()
        }
    
        companion object {
            val instance: Singleton by lazy { HOLDER.INSTANCE }
        }
    }
    

    در این حالت ، توسط { }lazy نشان می دهد که فقط در اولین دسترسی محاسبه می شود

    ارزیابی lazy properties همگام سازی شده است، مقدار فقط در یک رشته محاسبه می شود و همه thread ها یک مقدار را مشاهده می کنند.

    کاتلین اجرای پیش فرض مورد نیاز بالا را دارد.

    object Singleton

    بله !!! . فقط یک خط کد وجود دارد و می توانید از آن خطوط کد جلوگیری کنید. یک شی فقط یک نوع داده با یک thread-safe singleton پیاده سازی میکند.

    Object declarations

    object DataProviderManager {
        fun registerDataProvider(provider: DataProvider) {
            // ...
        }
    
        val allDataProviders: Collection<DataProvider>
            get() = // ...
    }
    
    

    درست مثل تعریف یک متغیر,تعریف object  صرفا یک عبارت نیست برای مراجعه به شیء ، از نام آن به طور مستقیم استفاده می کنیم.

    
    DataProviderManager.registerDataProvider(...)
    

    Objects ها میتوانند supertypes باشند.

    object DefaultListener : MouseAdapter() {
        override fun mouseClicked(e: MouseEvent) { ... }
    
        override fun mouseEntered(e: MouseEvent) { ... }
    }
    
    

    ممنون که با یکی دیگر از آموش های باگتو با ما همراه بودید امیدوارم که این آموزش مانند آموزش های قبلی مفید واقع شده باشد.

    سوالات و مشکلات خودتان را می توانید در بخش نظرات برای ما ارسال کنید.

    اطلاعات نویسنده
    • نویسنده: میثم بابائی

    ارسال دیدگاه

    برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربری‌تان شوید


    دیدگاه کاربران

    آموزش پیشنهادی باگتو


    course image

    Codex

    1,490,000 تومان

    449,000 تومان


    اطلاعات بیشتر

    course image

    آموزش http و مبانی web

    199,000 تومان

    39,800 تومان


    اطلاعات بیشتر

    }