Sobes.tech
Junior

Kā izveidot vienu klases eksemplāru Android?

sobes.tech AI

Atbilde no AI

Android parasti tiek izmantots Singleton paraugs, lai izveidotu klases vienīgo eksemplāru.

Ir vairāki Singleton īstenošanas veidi:

  1. Lazy inicializācija ar sinhronizāciju:

    public class Singleton {
        private static Singleton instance;
    
        private Singleton() {
            // Privāts konstruktors novērš citu eksemplāru izveidi
        }
    
        public static synchronized Singleton getInstance() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    }
    
    • Priekšrocības: Šaursērijas drošība.
    • Trūkumi: Sinhronizācija var samazināt veiktspēju biežu izsaukumu gadījumā.
  2. Klases ielādes laikā inicializācija (Eager initialization):

    public class Singleton {
        private static final Singleton instance = new Singleton();
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            return instance;
        }
    }
    
    • Priekšrocības: Šaursērijas drošība bez skaidras sinhronizācijas. Vienkāršāk.
    • Trūkumi: Eksemplārs tiek izveidots uzreiz, ielādējot klasi, pat ja tas netiek izmantots.
  3. Double-checked locking:

    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;
        }
    }
    
    • Priekšrocības: Palielināta veiktspēja salīdzinājumā ar vienkāršu sinhronizāciju, inicializācija tikai tad, kad nepieciešama.
    • Trūkumi: Prasa volatile pareizai darbībai daudzšēriju vidē.
  4. Statiskā iekšējā klase:

    public class Singleton {
        private Singleton() {}
    
        private static class SingletonHolder {
            public static final Singleton INSTANCE = new Singleton();
        }
    
        public static Singleton getInstance() {
            return SingletonHolder.INSTANCE;
        }
    }
    
    • Priekšrocības: Šaursērijas drošība, viltus inicializācija, vienkārša īstenošana. Ieteicamākais pieejas veids mūsdienu Java versijās.
  5. Enum lietošana:

    public enum Singleton {
        INSTANCE;
    
        // Pievienojiet klases metodes
        public void doSomething() {
            // ...
        }
    }
    
    • Priekšrocības: Visvienkāršākais un šaursērijas drošs veids, izturīgs pret serializāciju un refleksiju. Bieži uzskatīts par labāko praksi.

Izvēle ir atkarīga no konkrētajām prasībām veiktspējas un sarežģītības ziņā. Android bieži izmanto Enum vai statisko iekšējo klasi.