Junior
Ինչպես ստեղծել դասի միակ օրինակն Android-ում?
sobes.tech AI
Պատասխան AI-ից
Android-ում սովորաբար օգտագործվում է Singleton ձևանմուշ՝ դասի միակ օրինակ ստեղծելու համար:
Կան մի քանի մեթոդներ Singleton-ի իրականացման համար՝
-
Նահանջային ինիցիալիզացիա սինխրոնիզացիայով:
public class Singleton { private static Singleton instance; private Singleton() { // Պրիվատ կոնստրուկտորը կանխում է այլ օրինակների ստեղծումը } public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }- Առավելություններ՝ Անվտանգ է բազմաթելային միջավայրում:
- Թերություններ՝ Սինխրոնիզացիան կարող է նվազեցնել կատարողականությունը հաճախակի կանչումների դեպքում:
-
Դասի բեռնումով սկզբնական ինիցիալիզացիա (Eager initialization):
public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }- Առավելություններ՝ Անվտանգ է, առանց սինխրոնիզացիայի:
- Թերություններ՝ Օբյեկտը ստեղծվում է անմիջապես դասի բեռնումով, նույնիսկ եթե չի օգտագործվում:
-
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; } }- Առավելություններ՝ Ավելացված կատարողականություն՝ համեմատ պարզ սինխրոնիզացիայի, և ինիցիալիզացիան միայն անհրաժեշտության դեպքում:
- Թերություններ՝ Պահանջում է
volatile՝ ճիշտ աշխատանքի համար բազմաթելային միջավայրում:
-
Ստատիկ ներքին դաս:
public class Singleton { private Singleton() {} private static class SingletonHolder { public static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } }- Առավելություններ՝ Անվտանգ է, լազի ինիցիալիզացիա, պարզ է իրականացման համար:
- Առավելապես առաջարկվող մեթոդն է ժամանակակից Java տարբերակներում:
-
Enum-ների օգտագործում:
public enum Singleton { INSTANCE; // Ավելացրեք մեթոդներ public void doSomething() { // ... } }- Առավելություններ՝ Ամենահեշտ և բազմաթելային անվտանգ միջոց, դիմացկուն սերիալիզացիայի և ռեֆլեկցիայի նկատմամբ:
Ընտրությունը կախված է կոնկրետ պահանջներից՝ կատարողականություն և բարդություն:
Android-ում հաճախ օգտագործվում են Enum կամ static inner class մեթոդները։