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 же статикалык ички класс колдонулат.