Pola Singleton adalah pola penciptaan objek yang memastikan bahwa hanya ada satu contoh kelas dalam sistem.
Dalam bahasa Java, ada dua manfaat untuk melakukan ini:
1. Untuk objek yang sering digunakan, waktu yang dihabiskan untuk membuat objek dapat dihilangkan;
2. Karena penurunan jumlah operasi baru, frekuensi penggunaan memori sistem berkurang, yang mengurangi tekanan GC dan memperpendek waktu untuk jeda GC.
Segmentasi Pola Singleton:
1.
kelas publik singleton {private singleton () {system.out.println ("singleton.singleton ()"); } private static singleton singleton = singleton baru (); public static singleton getInstance () {return singleton; }}Catatan: Pertama, kelas Singleton harus memiliki konstruktor tingkat akses pribadi untuk memastikan bahwa singleton tidak dipakai oleh kode sistem lainnya; Kedua, variabel anggota singleton dan metode getInstance () harus statis.
Kelas singleton ini sangat sederhana untuk dibuat dan sangat dapat diandalkan. Satu -satunya kerugian adalah bahwa Singleton tidak dapat dimuat secara laten. Misalnya, karena proses pembuatan singleton sangat lambat dan variabel anggota didefinisikan sebagai statis, ketika JVM memuat kelas singleton, objek singleton juga akan dibuat. Kemudian, objek singleton akan dibuat di mana saja, kelas singleton digunakan, terlepas dari apakah objek singleton digunakan. Misalnya:
kelas publik singleton {private singleton () {system.out.println ("singleton.singleton ()"); } private static singleton singleton = singleton baru (); public static singleton getInstance () {return singleton; } public static void createString () {System.out.println ("singleton.createString ()"); }} 2. Untuk meningkatkan kecepatan panggilan fungsi terkait, mekanisme pemuatan malas perlu diperkenalkan.
paket com.luchao.singtonle; kelas publik lazysingleton {private lazysingleton () {system.out.println ("lazysingleton.lazysingleton ()"); } private static lazysingleton lazyInstance = null; lazysingleTeTon statis yang disinkronkan publik () {if (lazyInstance == null) lazyInstance = new lazysingleton (); Return LazyInstance; }}Penugasan inisialisasi singleton variabel statis adalah nol, memastikan bahwa tidak ada beban tambahan saat sistem dimulai. Dalam metode getInstance (), ditentukan bahwa instance saat ini sudah ada. Jika ada, itu kembali. Jika tidak ada, singleton dibuat. getInstance () harus menjadi metode sinkron, karena dalam lingkungan multi-threaded, ketika Thread 1 sedang membangun singleton dan sebelum penugasan selesai, Thread 2 dapat menentukan bahwa instance adalah nol, jadi Thread 2 akan memulai program untuk membuat singleton baru, menghasilkan beberapa singleton yang sedang dibuat.
Contoh implementasi singleton di atas mengimplementasikan pemuatan yang tertunda, tetapi memperkenalkan metode sinkronisasi, yang membutuhkan lebih banyak waktu daripada program singleton pertama dalam lingkungan multi-utas.
3. Pola singleton menggunakan kelas internal untuk mempertahankan penciptaan singleton
staticsingleton kelas publik {private staticsingleton () {system.out.println ("staticsingleton.staticsingleton ()"); } private static class singletonHolder {private static staticsingleton ataticsingleton = new staticsingleton (); } public static staticsingleton getInstance () {return singletonHolder.ataticsingleton; }}Ketika Staticsingleton dimuat, kelas dalam tidak akan dipakai, memastikan bahwa kelas singleton tidak akan diinisialisasi ketika kelas Staticsingleton dimuat ke dalam JVM, dan pemegang singleton dimuat ketika metode getInstance () dipanggil, dengan demikian menginisialisasi contoh. Ini juga digunakan untuk membuat instance ketika kelas dimuat, sehingga secara alami ramah.
Menggunakan kelas internal untuk menyelesaikan mode laba tunggal tidak hanya dapat mencapai pemuatan yang tertunda, tetapi juga menggunakan kata kunci sinkron. Ini adalah pendekatan yang relatif lengkap.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang.