
Apa sing diarani singleton ing basa Jawa?
Singleton minangka salah sawijining pola desain tingkat kelas sing paling gampang. Kadhangkala wong ngomong "kelas iki singleton", kang tegese kelas ngleksanakake pola desain singleton. Kadhangkala iku perlu kanggo nulis kelas ngendi kita matesi instantiation kanggo obyek siji. Contone, kelas tanggung jawab kanggo ngangkut barang utawa nyambung menyang a database. Pola desain singleton nggambarake carane kita bisa entuk iki. Singleton minangka pola desain sing nindakake rong perkara:-
Iku njamin yen mung bakal ana siji conto saka kelas.
-
Iki nyedhiyakake siji titik akses global menyang conto kasebut.
-
Konstruktor pribadi. Iki mbatesi kemampuan kanggo nggawe obyek saka kelas ing njaba kelas kasebut.
-
Cara statis umum sing ngasilake conto kelas. Cara iki diarani getInstance . Iki minangka titik akses global menyang conto kelas.
Pilihan implementasine
Pola desain singleton ditrapake kanthi macem-macem cara. Saben pilihan apik lan ala kanthi cara dhewe. Kaya biasane, ora ana pilihan sing sampurna ing kene, nanging kita kudu ngupayakake siji. Kaping pisanan, ayo mutusake apa sing dadi apik lan ala, lan metrik apa sing mengaruhi cara kita netepake macem-macem implementasi pola desain. Ayo dadi miwiti karo apik. Ing ngisor iki faktor sing nggawe implementasine luwih jus lan menarik:-
Inisialisasi kesed: instance ora digawe nganti dibutuhake.
-
Kode prasaja lan transparan: metrik iki, mesthi, subyektif, nanging penting.
-
Safety thread: operasi sing bener ing lingkungan multi-threaded.
-
Kinerja dhuwur ing lingkungan multi-utas: sithik utawa ora ana pamblokiran utas nalika nuduhake sumber daya.
-
Ora ana initialization kesed: nalika kelas dimuat nalika aplikasi diwiwiti, preduli saka apa sing dibutuhake utawa ora (paradoxically, ing donya IT iku luwih apik kanggo kesed)
-
Kode Komplek lan angel diwaca. Metrik iki uga subyektif. Yen mripatmu wiwit getihen, kita bakal nganggep implementasine ora paling apik.
-
Lack saka safety thread. Ing tembung liyane, "bebaya thread". Operasi sing salah ing lingkungan multi-threaded.
-
Kinerja sing ora apik ing lingkungan multi-utas: benang mblokir saben liyane utawa asring nalika nuduhake sumber daya.
Kode
Saiki kita siyap nimbang macem-macem opsi implementasine lan nuduhake pro lan kontra:Prasaja
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return INSTANCE;
}
}
Implementasine paling gampang. Kaluwihan:
-
Kode prasaja lan transparan
-
Keamanan thread
-
Kinerja dhuwur ing lingkungan multi-threaded
- Ora initialization puguh.
Inisialisasi malas
public class Singleton {
private static final Singleton INSTANCE;
private Singleton() {}
public static Singleton getInstance() {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}
}
Kaluwihan:
-
Inisialisasi malas.
-
Ora aman thread
Akses sing disinkronake
public class Singleton {
private static final Singleton INSTANCE;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}
}
Kaluwihan:
-
Inisialisasi malas.
-
Keamanan thread
-
Kinerja multithreaded sing ala
Ngunci dipriksa kaping pindho
public class Singleton {
private static final Singleton INSTANCE;
private Singleton() {
}
public static Singleton getInstance() {
if (INSTANCE == null) {
synchronized (Singleton.class) {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
}
}
return INSTANCE;
}
}
Kaluwihan:
-
Inisialisasi malas.
-
Keamanan thread
-
Kinerja dhuwur ing lingkungan multi-threaded
-
Ora didhukung ing versi Jawa sadurungé ing ngisor 1.5 (panggunaan tembung kunci molah malih tetep wiwit versi 1.5)
Sing duwe kelas
public class Singleton {
private Singleton() {
}
private static class SingletonHolder {
public static final Singleton HOLDER_INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.HOLDER_INSTANCE;
}
}
Kaluwihan:
-
Inisialisasi malas.
-
Keamanan thread.
-
Kinerja dhuwur ing lingkungan multi-threaded.
-
Operasi sing bener mbutuhake jaminan manawa obyek tunggal diinisialisasi tanpa kesalahan. Yen ora, telpon pisanan kanggo metode getInstance bakal ngasilake ExceptionInInitializerError , lan kabeh panggilan sakteruse bakal ngasilake NoClassDefFoundError .
Implementasine | Inisialisasi malas | Keamanan thread | kinerja multithreaded | Nalika nggunakake? |
---|---|---|---|---|
Prasaja | - | + | Cepet | ora tau. Utawa bisa uga nalika initialization malas ora penting. Nanging ora bakal luwih apik. |
Inisialisasi malas | + | - | Ora ditrapake | Tansah nalika multithreading ora dibutuhake |
Akses sing disinkronake | + | + | alon-alon | ora tau. Utawa bisa uga nalika kinerja multithreaded ora Matter. Nanging ora bakal luwih apik. |
Ngunci dipriksa kaping pindho | + | + | Cepet | Ing kasus langka nalika sampeyan kudu nangani pangecualian nalika nggawe singleton (nalika sing duwe kelas singleton ora ditrapake) |
Sing duwe kelas | + | + | Cepet | Kapan multithreading dibutuhake lan ana jaminan manawa obyek tunggal bakal digawe tanpa masalah. |
Pros lan cons saka pola singleton
Umumé, singleton nindakake apa sing dikarepake:-
Iku njamin yen mung bakal ana siji conto saka kelas.
-
Iki nyedhiyakake siji titik akses global menyang conto kasebut.
-
Singleton nglanggar prinsip tanggung jawab tunggal: saliyane tugas langsung, kelas singleton uga ngontrol jumlah kedadeyan.
-
Ketergantungan kelas biasa marang singleton ora katon ing kontrak umum kelas kasebut.
-
Variabel global ala. Pungkasane, siji-sijine dadi variabel global sing akeh banget.
-
Ing ngarsane singleton nyuda testability saka aplikasi minangka kabèh lan kelas sing nggunakake singleton ing tartamtu.
GO TO FULL VERSION