Sobes.tech
Junior

Androidda sinfning yagona nusxasini qanday yaratish mumkin?

sobes.tech AI

AIdan javob

Androidda sinfning yagona nusxa yaratish uchun odatda Singleton naqshini qo'llashadi.

Singletonni amalga oshirishning bir nechta usullari mavjud:

  1. Kechiktirilgan boshlanish va sinxronizatsiya bilan:

    public class Singleton {
        private static Singleton instance;
    
        private Singleton() {
            // Maxfiy konstruktor boshqa nusxalarni yaratishni oldini oladi
        }
    
        public static synchronized Singleton getInstance() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    }
    
    • Afzalliklar: Ipni xavfsiz.
    • Kamchiliklar: Sinxronizatsiya tez-tez chaqirilganda ishlashini sekinlashtirishi mumkin.
  2. Klass yuklanishi bilan boshlanish (Eager initialization):

    public class Singleton {
        private static final Singleton instance = new Singleton();
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            return instance;
        }
    }
    
    • Afzalliklar: Aniq ipni xavfsiz, sinxronizatsiyasiz. Oddiy.
    • Kamchiliklar: Nusa klass yuklanishi bilan yaratiladi, hatto foydalanilmasa ham.
  3. Ikki marta tekshirish bilan blokirovka qilish:

    public class Singleton {
        private static volatile Singleton instance;
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
    
    • Afzalliklar: Oddiy sinxronizatsiyaga nisbatan yaxshiroq ishlash, faqat kerak bo'lganda boshlash.
    • Kamchiliklar: volatile talab qilinadi, to'g'ri ishlash uchun (Java 5 va undan yuqori). Murakkabroq.
  4. Statik ichki sinf:

    public class Singleton {
        private Singleton() {}
    
        private static class SingletonHolder {
            public static final Singleton INSTANCE = new Singleton();
        }
    
        public static Singleton getInstance() {
            return SingletonHolder.INSTANCE;
        }
    }
    
    • Afzalliklar: Ipni xavfsiz, kechiktirilgan boshlanish, amalga oshirish oson. Zamonaviy Java versiyalarida eng tavsiya etilgan yondashuv.
  5. Enumlardan foydalanish:

    public enum Singleton {
        INSTANCE;
    
        // Sinf metodlarini qo'shing
        public void doSomething() {
            // ...
        }
    }
    
    • Afzalliklar: Eng oddiy va ipni xavfsiz usul, serializatsiya va refleksiya qarshi chidamli. Ko'pincha eng yaxshi amaliyot hisoblanadi.

Amalga oshirish tanlovi maxsus talablar, ishlash va murakkablik talablariga bog'liq. Androidda ko'pincha Enum yoki statik ichki sinf ishlatiladi.