Sobes.tech
Junior

Android-də bir sinifin tək nümunəsini necə yaratmaq olar?

sobes.tech Süni İntellekt

AI-dan cavab

Android-də tək nümunə yaratmaq üçün adətən Singleton nümunəsi istifadə olunur.

Singleton-i həyata keçirməyin bir neçə yolu var:

  1. Ləng başlatma və sinxronizasiya ilə:

    public class Singleton {
        private static Singleton instance;
    
        private Singleton() {
            // Xüsusi konstruktor digər nümunələrin yaradılmasını qarşısını alır
        }
    
        public static synchronized Singleton getInstance() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    }
    
    • Üstünlüklər: İplə təhlükəsiz.
    • Dezavantajlar: Sinxronizasiya çox vaxt çağırışlarda performansı azalda bilər.
  2. Sınıf yüklənərkən başlatma (Eager initialization):

    public class Singleton {
        private static final Singleton instance = new Singleton();
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            return instance;
        }
    }
    
    • Üstünlüklər: Açıq ip təhlükəsiz, sinxronizasiya olmadan. Daha sadə.
    • Dezavantajlar: Nümunə sinif yüklənərkən yaradılır, istifadə olunmasa belə.
  3. İki dəfə yoxlama ilə kilidləmə:

    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;
        }
    }
    
    • Üstünlüklər: Sadə sinxronizasiya ilə müqayisədə daha yaxşı performans, ehtiyac olduqda başlatma.
    • Dezavantajlar: volatile tələb edir, çox ipli mühitdə düzgün işləmək üçün (Java 5-dən etibarən). Daha mürəkkəb.
  4. Statik daxili sinif:

    public class Singleton {
        private Singleton() {}
    
        private static class SingletonHolder {
            public static final Singleton INSTANCE = new Singleton();
        }
    
        public static Singleton getInstance() {
            return SingletonHolder.INSTANCE;
        }
    }
    
    • Üstünlüklər: İplə təhlükəsiz, ləng başlatma, həyata keçirməsi asan. Müasir Java versiyalarında ən tövsiyə olunan yanaşma.
  5. Enum-lardan istifadə:

    public enum Singleton {
        INSTANCE;
    
        // Sinif metodlarını əlavə edin
        public void doSomething() {
            // ...
        }
    }
    
    • Üstünlüklər: Ən sadə və ip təhlükəsiz üsul, serializasiya və refleksiya qarşı dayanıqlı. Çox vaxt ən yaxşı təcrübə hesab olunur.

Həyata keçirmə seçimi xüsusi performans və mürəkkəblik tələblərindən asılıdır. Android-də çox vaxt Enum və ya statik daxili sinif istifadə olunur.