Definisi: Pastikan bahwa kelas hanya memiliki satu contoh, dan instantiate itu sendiri dan memberikan contoh ini ke seluruh sistem.
Jenis: Buat Diagram Kelas Pola Kelas:
Poin Pengetahuan Diagram Kelas:
1. Diagram kelas dibagi menjadi tiga bagian, nama, atribut, dan metode.
2. Informasi komentar dimulai dengan << dan berakhir dengan >>
3. Modifier + mewakili publik, - mewakili pribadi, # mewakili dilindungi, tidak ada yang mewakili paket yang terlihat.
4. Atribut atau metode yang digarisbawahi mewakili statis.
5. Teman -teman yang tidak terbiasa dengan hubungan antara objek dalam diagram kelas dapat merujuk pada artikel: Hubungan antar kelas dalam pola desain.
Mode singleton harus menjadi mode paling sederhana di antara 23 mode desain. Itu memiliki elemen berikut:
Mari kita lihat contoh sederhana:
package com.wolf.action;import java.util.HashMap;import java.util.Map;public class demo { public static void main(String args[]) throws InstantiationException, IllegalAccessException, ClassNotFoundException { System.out.println(Son.getInstance().getName()); System.out.println ("Who Am I"); }} class son memperluas ayah {private string name = "son"; final string class = "Demo"; string yang dilindungi getName () {return this.query ("aaa"); } public static son getInstance () melempar InstantiationException, IllegalAccessException, ClassNotFoundException {// ini harus menjadi jalur global, sebaliknya mengembalikan (Son) instance ("com.wolf.action.son"); }} class bapak {private static Map <string, object> instance = new HashMap <String, Object> (); name string pribadi = "kelas premium"; fatcher void yang dilindungi () {System.out.println ("I Am the Parent Class"); } Query String Protected (String SQL) {return sql + "telah dilakukan"; } Public Static Object Instance (String objName) melempar InstantiationException, IllegalAccessException, ClassNotFoundException {if (instance.get (objname) == null ||! (Contoh.get (objname) instance dari ayah)) {instance.put (objName, class.fornname (objname) ayah)) {instance.put (objname, class.fornname (objname) ayah)) {nilge.put (objname, class.fornname (objname) father)) {instance.put (objName, class.fornname (objname) ayah)) {instance.put (objName, class.fornname (objname) ayah)) {need. } return instance.get (objname); }} Pola singleton dibagi menjadi dua jenis sesuai dengan waktu instantiasi objek: satu adalah singleton yang lapar dan yang lainnya adalah singleton malas. Ketika kelas singleton dimuat, singleton instantiates objek ke referensi sendiri; Gaya malas akan membuat instansi objek hanya ketika metode instance dipanggil. Kodenya adalah sebagai berikut:
Kasing tunggal gaya pria lapar
Singleton kelas publik {private static singleton singleton = singleton baru (); private singleton () {} public static singleton getInstance () {return singleton; }}Malas satu kasing
Singleton kelas publik {private static singleton singleton; private singleton () {} public static Synchronized singleton getInstance () {if (singleton == null) {singleton = new singleton (); } return singleton; }}Keuntungan dari Singleton Mode:
Skenario yang berlaku: Karena keunggulan di atas dari mode singleton, ini adalah mode desain yang lebih umum digunakan dalam pemrograman. Saya merangkum apa yang saya ketahui tentang skenario yang cocok untuk menggunakan mode singleton:
Catatan tentang Singleton Mode:
Beberapa kontroversi tentang pola singleton di java:
Jika suatu objek dalam mode singleton tidak digunakan untuk waktu yang lama, apakah akan dikumpulkan oleh pengumpul sampah JVM? Saya melihat banyak informasi yang mengatakan: Jika objek Singleton tidak digunakan dalam memori untuk waktu yang lama, itu akan dianggap sebagai sampah oleh JVM dan akan dibersihkan saat melakukan pengumpulan sampah. Saya skeptis tentang pernyataan ini. Pandangan saya sendiri adalah: Di Hotspot Virtual Machine Versi 1.6, kolektor sampah JVM tidak akan mendaur ulang objek singleton kecuali koneksi secara statis dirujuk ke objek singleton di singleton secara buatan terputus.
Mengenai kontroversi ini, penulis menulis artikel terpisah untuk membahasnya. Jika Anda memiliki pendapat yang berbeda atau telah mengalami ini, silakan masukkan artikel Singleton Model Diskusi: Singleton Model dan sampah koleksi berpartisipasi dalam diskusi.
Akankah beberapa singleton muncul dalam JVM
Dalam kasus sistem terdistribusi, beberapa loader kelas, dan serial, beberapa singleton akan dihasilkan, yang tidak diragukan lagi benar. Jadi, apakah singleton akan dihasilkan dalam JVM yang sama? Hanya singleton yang sama yang dapat diperoleh dengan menggunakan metode getInstance () yang disediakan oleh singleton, kecuali jika metode refleksi digunakan, singleton baru akan diperoleh. Kodenya adalah sebagai berikut
Class c = class.forname (singleton.class.getName ()); Konstruktor ct = c.getDeclaredConstructor (); ct.setAccessible (true); Singleton singleton = (singleton) ct.newinstance ();
Dengan cara ini, setiap proses akan menghasilkan objek Singleton baru. Oleh karena itu, saat menggunakan mode singleton, berhati -hatilah untuk tidak menggunakan refleksi untuk menghasilkan objek singleton baru.
Apakah utas singleton malas aman?
Ini terutama beberapa pernyataan online bahwa pola singleton malas adalah benang-utas. Bahkan menambahkan kata kunci yang disinkronkan ke metode instantiasi masih berbahaya. Namun, setelah pengkodean pengkodean, saya menemukan bahwa setelah menambahkan kata kunci yang disinkronkan untuk memodifikasinya, meskipun memiliki dampak parsial pada kinerja, itu aman-aman dan tidak instantiate banyak objek.
Apakah hanya ada dua jenis mode singleton: gaya lapar dan malas?
Hungry Singleton dan Lazy Singleton hanyalah dua metode pola singleton yang relatif umum dan umum digunakan. Secara teoritis, pola desain apa pun yang hanya dapat mengimplementasikan satu contoh kelas dapat disebut pola singleton.
Bisakah kelas singleton diwarisi?
Karena metode konstruksi bersifat pribadi, mereka tidak dapat diwariskan, tetapi banyak pola singleton lainnya dapat diwariskan, seperti singleton terdaftar.
Apakah lebih baik menjadi singleton yang lapar atau singleton malas
Di Java, singleton yang lapar lebih baik daripada singleton malas. Dalam C ++, singleton malas umumnya digunakan.
Pola singleton relatif sederhana, jadi saya tidak akan memberikan contoh demonstrasi kode di sini.