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:
-
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.
-
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ə.
-
İ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:
volatiletə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.
-
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.
-
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.