Artikel ini berbagi kode spesifik dari pola singleton dari pola desain java untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
konsep:
Pola Singleton: Hanya ada satu contoh di kelas.
Kelas memiliki dan hanya satu contoh dan memberikan titik akses global.
Penyebab menggunakan mode ini:
Saat kami menjelajahi situs web, beberapa situs web akan menampilkan "jumlah orang online saat ini". Secara umum, cara untuk mengimplementasikan fungsi ini adalah dengan menyimpan setiap login dalam IP dalam memori, file atau basis data, dan setiap IP tambahan tercapai "+1". Secara umum, ini adalah metode, seperti add (), untuk mewujudkan fungsi "+1". Misalnya, gunakan pernyataan "Perbarui" untuk mendapatkan data yang disimpan dalam database terlebih dahulu, lalu +1, perbarui data dalam database, dan kemudian simpan; Saat ditampilkan pada halaman, Anda dapat memperoleh data dalam database melalui metode lain. Namun, ketika beberapa pengguna masuk pada saat yang sama, jika masing -masing dari mereka membutuhkan objek baru, kemudian menjalankan metode add () melalui panggilan "objek. Metode nama", dan kemudian menyimpan data dalam database, ini akan menyebabkan banyak pengguna tidak dapat secara akurat merekam data pengguna yang sebenarnya ke dalam database. Oleh karena itu, merancang penghitung ini sebagai objek global (semua orang menggunakan objek ini, bukan satu, yang baru), dan semua orang berbagi data yang sama, dapat menghindari masalah yang sama. Ini adalah salah satu aplikasi dari pola singleton yang kami sebut.
Demikian pula, dalam skenario lain, skenario serupa akan ditemui dan ide -ide serupa akan digunakan. Misalnya:
1. Sumber Daya Eksternal: Setiap komputer memiliki beberapa printer, tetapi hanya satu printerpooler yang dapat digunakan untuk menghindari dua pekerjaan cetak yang menjadi output ke printer pada saat yang sama. Sumber Daya Internal: Sebagian besar perangkat lunak memiliki satu (atau lebih) file atribut untuk menyimpan konfigurasi sistem. Sistem seperti itu harus memiliki objek untuk mengelola file atribut ini. 2. Windows 'Task Manager (Task Manager) adalah mode Singleton yang khas (ini sangat akrab). Pikirkan tentang hal ini, dapatkah Anda membuka dua manajer tugas Windows? Jika Anda tidak percaya, coba sendiri ~
3. Bin daur ulang untuk windows juga merupakan aplikasi singleton yang khas. Selama seluruh operasi sistem, tempat sampah daur ulang hanya mempertahankan satu contoh.
4. Penghitung situs web umumnya diimplementasikan dalam mode singleton, jika tidak, akan sulit untuk disinkronkan.
5. Bagaimana aplikasi log aplikasi dapat diimplementasikan dalam mode singleton? Ini umumnya karena file log bersama selalu terbuka, karena hanya ada satu contoh untuk beroperasi, jika tidak konten akan sulit ditambahkan.
6. Mode singleton umumnya digunakan untuk membaca objek konfigurasi dalam aplikasi web, karena file konfigurasi adalah sumber daya bersama.
7. Desain kumpulan koneksi database umumnya mengadopsi mode singleton, karena koneksi database adalah sumber daya database. Penggunaan kumpulan koneksi database dalam sistem perangkat lunak basis data terutama menghemat kerugian efisiensi yang disebabkan oleh pembukaan atau penutupan koneksi basis data. Kerugian efisiensi ini masih sangat mahal, karena mode singleton dapat sangat mengurangi kerugian ini.
8. Desain kumpulan benang multi-utas umumnya mengadopsi mode singleton, karena kumpulan utas perlu memfasilitasi kontrol utas di kolam.
9. Sistem file sistem operasi juga merupakan contoh spesifik dari implementasi mode singleton besar. Sistem operasi hanya dapat memiliki satu sistem file.
10. Httpapplication juga merupakan aplikasi khas dari contoh unit. Siapa pun yang akrab dengan seluruh siklus hidup Asp.net (IIS) harus tahu bahwa httpapplication juga merupakan pola singleton, dan semua httpmodules berbagi instance httpapplication.
Singkatnya, skenario aplikasi umum dari mode singleton adalah:
1. Objek yang perlu sering dipakai dan kemudian dihancurkan.
2. Objek yang membutuhkan terlalu banyak waktu atau terlalu banyak sumber daya saat membuat objek, tetapi sering digunakan.
3. Objek seperti alat yang stateful.
4. Sering akses ke objek database atau file.
5. Dalam hal berbagi sumber daya, hindari kinerja atau kerugian yang disebabkan oleh operasi sumber daya. Seperti file log, konfigurasi aplikasi, dll. Di atas.
6. Saat mengendalikan sumber daya, memfasilitasi komunikasi timbal balik antara sumber daya. Seperti kumpulan utas, dll.
Fitur:
1. Hanya ada satu contoh di kelas singleton;
2. Kelas Singleton harus membuat contoh uniknya sendiri;
3. Kelas Singleton harus memberikan contoh ini kepada semua objek lain.
Elemen Pola Singleton:
1. Metode Konstruksi Pribadi
2. Referensi statis pribadi poin ke contoh Anda sendiri
3. Metode statis publik dengan contohnya sendiri sebagai nilai pengembalian
Ada tiga cara untuk menerapkan pola singleton:
1. Gaya Lapar: Singleton Instances dibangun saat memuat kelas dan segera diinisialisasi. (Metode preload)
/*** gaya pria lapar (disarankan) **/tes kelas publik {private test () {} public static test instance = new test (); tes publik getInstance () {instance return; }} keuntungan
1. Keamanan utas
2. Objek statis telah dibuat saat kelas memuat, dan kecepatan responsnya cepat saat menyebutnya
kekurangan
Efisiensi sumber daya tidak tinggi, dan getInstance () mungkin tidak pernah dieksekusi, tetapi jika metode statis kelas lainnya dieksekusi atau kelas (class.forname) dimuat, maka contoh ini masih diinisialisasi.
2. Gaya Lazy: Singleton Instances dibangun ketika digunakan untuk pertama kalinya dan diinisialisasi.
tes kelas {private test () {} public static test instance = null; tes statis public getInstance () {if (instance == null) {// Ketika beberapa utas menentukan bahwa instance adalah nol, beberapa utas akan memiliki duplikasi saat melakukan operasi baru instance = singleton2 baru (); } return instance; }} keuntungan
Hindari penciptaan kasus tanpa menggunakannya dalam bentuk pria lapar. Tingkat pemanfaatan sumber daya tinggi. Jika Anda tidak mengeksekusi getInstance (), Anda tidak akan dipasang. Metode statis lain dari kelas ini dapat dieksekusi.
kekurangan
Tidak ada masalah dengan gaya malas dalam satu utas, tetapi ketika kolega mengakses banyak utas, mereka dapat membuat banyak contoh, dan beberapa contoh ini bukan objek yang sama. Meskipun contoh yang dibuat kemudian akan menimpa contoh yang dibuat terlebih dahulu, masih akan ada kasus di mana objek yang berbeda diperoleh. Solusi untuk masalah ini adalah mengunci sinkronisasi, yang tidak cukup cepat saat memuat untuk pertama kalinya, dan overhead sinkronisasi multi-threading yang tidak perlu tinggi.
3. Deteksi ganda
tes kelas {private test () {} public static test instance = null; tes statis publik getInstance () {if (instance == null) {disinkronkan (test.class) {if (instance == null) {instance = new test (); }} return instance; }} keuntungan
Tingkat pemanfaatan sumber daya tinggi. Jika Anda tidak mengeksekusi getInstance (), Anda tidak akan dipasang. Anda dapat menjalankan metode statis lain dari kelas ini.
kekurangan
Responsnya tidak cepat saat memuat untuk pertama kalinya, dan kadang -kadang gagal karena beberapa alasan model memori Java.
4. Kelas internal statis
tes kelas {private test () {} private static class singletonhelp {static test instance = new test (); } tes statis publik getInstance () {return singletonhelp.instance; }} keuntungan
Tingkat pemanfaatan sumber daya tinggi, dan tidak dieksekusi tanpa mendapatkan contoh. Anda dapat menjalankan metode statis lain dari kelas ini.
kekurangan
Tidak cukup cepat saat memuat untuk pertama kalinya
Meringkaskan:
Umumnya, gaya lapar digunakan. Jika Anda sangat peduli tentang sumber daya, Anda dapat menggunakan jenis internal statis. Tidak disarankan untuk menggunakan gaya malas dan deteksi ganda.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.