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лозим аст (аз Java 5). Муҳитро мураккаб мекунад.
-
Класи дохилии статикӣ:
public class Singleton { private Singleton() {} private static class SingletonHolder { public static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } }- Манфиатҳо: Бехатар дар рахи, инициализатсияи суст, осон дар иҷро. Ин усули тавсияшуда дар версияҳои муосири Java.
-
Истифодаи Enums:
public enum Singleton { INSTANCE; // Методҳои класа илова кунед public void doSomething() { // ... } }- Манфиатҳо: Самтан осон ва бехатар дар рахи, муқовимат ба сериализатсия ва рефлексия. Беҳтарин амалия ҳисобида мешавад.
Интихоби иҷрои вобаста ба талаботҳои махсуси иҷроиш ва мураккабӣ мебошад. Дар Android, одатан Enum ё класи дохилии статикӣ истифода мешавад.