Halo semuanya, javaRush!
Hari ini saya akan bercerita tentang pola desain
Singleton
(tunggal).
Sasaran: membuat kelas yang hanya memiliki SATU objek. Artinya berapa kali pun diakses, objek yang sama yang dibuat pertama kali akan dikembalikan. Ini adalah hal yang nyaman dan diperlukan di banyak tempat, dan bukan tanpa alasan hal ini diterapkan ke dalam kerangka kerja.
Aplikasi:
- Misalnya, Anda perlu menyambungkan database ke suatu proyek dan kelas yang akan bertanggung jawab untuk menyambungkannya. Koneksi dibuat satu kali dan tidak perlu membuatnya lagi dan lagi
Application settings
— kelas yang bertanggung jawab atas pengaturan koneksi yang diperlukan untuk aplikasi: host dan port database, dll. Mereka dibuat satu kali dan digunakan sepanjang operasi aplikasi.
- Masih banyak lagi contoh yang belum saya sebutkan, jadi tulis pilihanmu di kolom komentar! =)
Setelah pengenalan ini, sejauh yang saya pahami, kita dapat menunjukkan contoh kelas ini: (Meskipun saya yakin kita masing-masing dapat membuat implementasinya) Berikut adalah contoh paling sederhana, ketika kita membuat konstruktor menjadi pribadi, yaitu. Anda tidak dapat membuat objek secara eksplisit. Dan ada metode statis
getInstance()
yang menyediakan objek.
public class Singleton {
private static Singleton instance;
private Singleton () {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
Ada masalah dengan multithreading dan kemudian Anda dapat meletakkan metode
getInstance()
penanda
synchronized
:
public class Singleton {
private static Singleton instance;
private Singleton () {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
Pada akhirnya, seperti biasa, saya ingin mengatakan bahwa jika Anda berpikir berbeda atau menemukan kesalahan dalam diri saya, tulis di komentar! Kami akan mendiskusikan semuanya dengan senang hati :) Jika Anda menyukai artikel ini, tulis “+” dan saya akan mengetahuinya. Ini penting bagi saya :) PS Saya menambahkan lebih banyak implementasi: Menurut
Joshua Bloch , ini adalah cara terbaik untuk mengimplementasikan template
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;
}
}
Dan selanjutnya
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 lambat
+
Kinerja tinggi
-
Tidak dapat digunakan untuk bidang kelas non-statis Ada pertanyaan/saran - tulis di komentar!
Lihat juga artikel saya yang lain:
GO TO FULL VERSION