Halo kabeh, javaRush!
Dina iki aku bakal ngandhani babagan pola desain
Singleton
(single).
Goal: nggawe kelas sing mung duwe SATU obyek. Iki tegese ora ketompo carane kakehan diakses, obyek sing padha digawe pisanan bakal bali. Iki minangka barang sing trep lan perlu ing pirang-pirang papan, ora ana gunane sing ditindakake ing kerangka kerja.
Aplikasi:
- Contone, sampeyan kudu nyambungake database menyang project lan kelas sing bakal tanggung jawab kanggo nyambung menyang. Sambungan digawe sepisan lan ora perlu nggawe maneh lan maneh
Application settings
- kelas tanggung jawab kanggo setelan sambungan sing dibutuhake kanggo aplikasi: host database lan port, etc. Lagi digawe sapisan lan digunakake ing saindhenging operasi aplikasi.
- Ana akeh conto liyane sing durung dakcritakake, mula tulis pilihan sampeyan ing komentar! =)
Sawise introduksi iki, kaya aku ngerti, kita bisa nuduhake conto kelas iki: (Senajan aku yakin sing saben kita bisa teka munggah karo implementasine iki) Punika conto paling prasaja, nalika kita nggawe pribadi konstruktor, i.e. Sampeyan ora bisa nggawe obyek kanthi jelas. Lan ana cara statis
getInstance()
sing nyedhiyakake obyek.
public class Singleton {
private static Singleton instance;
private Singleton () {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
Ana masalah karo multithreading banjur sampeyan bisa sijine cara
getInstance()
marker
synchronized
:
public class Singleton {
private static Singleton instance;
private Singleton () {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
Ing pungkasan, kaya biasane, aku pengin ngomong yen sampeyan mikir beda utawa nemokake kesalahan ing aku, tulis ing komentar! Kita bakal ngrembug kabeh kanthi seneng :) Yen sampeyan seneng karo artikel kasebut, tulis "+" lan aku bakal ngerti. Iki penting kanggo kula :) PS Aku nambah implementasine liyane: Miturut
Joshua Bloch , iki cara paling apik kanggo ngleksanakake cithakan
Enum Singleton
public enum Singleton {
INSTANCE;
}
Double Checked Locking & volatile
public class Singleton {
private static volatile Singleton instance;
public static Singleton getInstance() {
Singleton localInstance = instance;
if (localInstance == null) {
synchronized (Singleton.class) {
localInstance = instance;
if (localInstance == null) {
instance = localInstance = new Singleton();
}
}
}
return localInstance;
}
}
Lan luwih
On Demand Holder idiom
:
public class Singleton {
public static class SingletonHolder {
public static final Singleton HOLDER_INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.HOLDER_INSTANCE;
}
}
+
Inisialisasi kesed
+
Kinerja dhuwur
-
Ora bisa digunakake kanggo lapangan kelas non-statis Sembarang pitakonan / saran - tulis ing komentar!
Deleng uga artikelku liyane:
GO TO FULL VERSION