1 Ikhtisar
Pola singleton memiliki beberapa manfaat:
(1) Kelas-kelas tertentu dibuat lebih sering. Untuk beberapa objek besar, ini merupakan overhead sistem yang sangat besar.
(2) Operator baru dihilangkan, yang mengurangi frekuensi penggunaan memori sistem dan mengurangi tekanan GC.
(3) Beberapa kelas, seperti mesin perdagangan inti di suatu bursa, mengontrol proses transaksi. Jika beberapa kelas dapat dibuat, sistem akan menjadi kacau balau.
2 Penjelasan rinci
Ada dua cara penulisan pola singleton yang umum digunakan sebagai berikut.
2.1 Gaya Cina yang lapar
Jika aplikasi selalu membuat dan menggunakan pola tunggal, atau jika tekanan pembuatan dan runtime tidak terlalu tinggi, Anda dapat menggunakan variabel statis privat untuk membuat objek terlebih dahulu.
Copy kode kodenya sebagai berikut:
paket org.scott.singleton;
/**
* @penulis Scott
* @versi 2013-11-16
* @keterangan
*/
kelas publik Singleton1 {
private static Singleton1 UniqueInstance = new Singleton1();
pribadi Singleton1(){
}
getInstance Singleton1 statis publik(){
kembalikan UniqueInstance;
}
}
Dalam hal ini, ketika JVM memuat kelas ini, objek akan dibuat sesuai dengan urutan inisialisasi. Pada saat yang sama, JVM dapat menjamin bahwa setiap thread harus membuat instance ini terlebih dahulu dan hanya sekali sebelum mengakses objek tunggal ini.
Tentu saja, Anda juga dapat menggunakan kelas dalam statis untuk mencapai fungsi yang sama.
Copy kode kodenya sebagai berikut:
paket org.scott.singleton;
/**
* @penulis Scott
* @versi 2013-11-16
* @keterangan
*/
kelas publik Singleton2 {
pribadi Singleton2() {
}
/**
* Kelas internal digunakan di sini untuk mempertahankan singleton
* */
kelas statis pribadi SingletonFactory {
instance Singleton2 statis pribadi = new Singleton2();
}
publik statis Singleton2 getInstance() {
kembalikan SingletonFactory.instance;
}
/**
* Jika objek digunakan untuk serialisasi, dapat dijamin objek tersebut tetap konsisten sebelum dan sesudah serialisasi
* */
Objek publik readResolve() {
kembalikan getInstance();
}
}
2.2 Metode kunci ganda
"Kunci ganda", seperti namanya, adalah dua kunci. Kunci pertama digunakan untuk memeriksa apakah objek instance yang akan dibuat sudah dibuat.
Copy kode kodenya sebagai berikut:
paket org.scott.singleton;
/**
* @penulis Scott
* @versi 2013-11-16
* @keterangan
*/
kelas publik Singleton3 {
instance unik Singleton3 statis volatil pribadi;
pribadi Singleton3(){
}
getInstance Singleton3 statis publik(){
jika(Instance unik == null){
disinkronkan(Singleton3.class){
jika(Instance unik == null){
UniqueInstance = Singleton3() baru;
}
}
}
kembalikan UniqueInstance;
}
}
Jika persyaratan kinerjanya relatif tinggi, metode ini dapat sangat mengurangi waktu pembuatan. Saat ini, metode ini juga merupakan cara yang relatif umum untuk membuat singleton.