Konsep Pola Singleton:
Pola singleton di java adalah pola desain yang umum. Pola singleton dibagi menjadi tiga jenis: Lazy Singleton, Hungry Singleton, dan terdaftar Singleton.
Mode singleton memiliki karakteristik berikut:
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.
Pola Singleton memastikan bahwa suatu kelas hanya memiliki satu contoh, dan membuat instansi itu sendiri dan memberikan contoh ini ke seluruh sistem. Dalam sistem komputer, objek driver untuk kumpulan utas, cache, objek log, kotak dialog, printer, dan kartu grafis sering dirancang sebagai singleton. Aplikasi ini memiliki lebih atau kurang fungsionalitas manajer sumber daya. Setiap komputer dapat memiliki beberapa printer, tetapi hanya satu spooler printer yang dapat tersedia untuk menghindari dua pekerjaan cetak yang menghasilkan printer pada saat yang sama. Setiap komputer dapat memiliki beberapa port komunikasi, dan sistem harus mengelola port komunikasi ini secara terpusat untuk menghindari satu port komunikasi yang disebut secara bersamaan dengan dua permintaan. Singkatnya, memilih model singleton adalah untuk menghindari negara -negara yang tidak konsisten dan menghindari bullish politik.
Pertama, mari kita lihat implementasi Singleton klasik.
kelas publik singleton {private static singleton unikinstance = null; singleton pribadi () {// ada hanya untuk mengalahkan instantiasi. } public static singleton getInstance () {if (unikinstance == null) {unikinStance = singleton baru (); } return unikInstance; } // metode lain ...}Singleton menghindari kelas yang dipakai secara eksternal dengan membatasi konstruktor untuk pribadi. Dalam ruang lingkup mesin virtual yang sama, satu -satunya contoh singleton hanya dapat diakses melalui metode getInstance (). ;
Namun, implementasi di atas tidak mempertimbangkan masalah keselamatan utas. Sarana Keselamatan Thread: Jika kode Anda sedang dalam proses di mana banyak utas berjalan pada saat yang sama, dan utas ini dapat menjalankan kode ini secara bersamaan. Jika hasil dari setiap proses sama dengan hasil dari satu utas yang dijalankan, dan nilai-nilai variabel lain sama dengan yang diharapkan, itu aman. Dengan kata lain: antarmuka yang disediakan oleh kelas atau program adalah operasi atom untuk utas atau pengalihan antara beberapa utas tidak akan menyebabkan ambiguitas pada hasil eksekusi antarmuka, yaitu, kita tidak perlu mempertimbangkan masalah sinkronisasi. Jelas, implementasi di atas tidak memenuhi persyaratan keselamatan utas, dan beberapa contoh singleton cenderung muncul di lingkungan yang bersamaan.
Public Class TestStream {Private String Name; public string getName () {return name; } public void setName (name string) {this.name = name; } // Kelas ini hanya dapat memiliki satu instance private testStream () {} // Private non-argument constructor // kelas ini harus dibuat dengan sendirinya // Ada 2 cara/*private static final teststream ts = teststream baru ();*/private static teststream ts1 = null; // Kelas ini harus secara otomatis memberikan objek instan ini ke seluruh sistem public static teststream getTest () {if (ts1 == null) {ts1 = testStream baru (); } return ts1; } public void getInfo () {System.out.println ("Pesan Output"+Nama); }} kelas publik testmain {public static void main (string [] args) {testStream s = testStream.gettest (); S.SetName ("Zhang Xiaoxiang"); System.out.println (s.getName ()); TestStream S1 = testStream.gettest (); S1.SetName ("Zhang Xiaoxiang"); System.out.println (s1.getName ()); s.getInfo (); s1.getInfo (); if (s == s1) {System.out.println ("Contoh yang sama dibuat"); } else if (s! = s1) {System.out.println ("Membuat bukan contoh yang sama"); } else {System.out.println ("kesalahan aplikasi"); }}}}Hasil Menjalankan:
Zhang Xiaoxiang Zhang Xiaoxiang
Pesan Output Zhang Xiaoxiang
Pesan Output Zhang Xiaoxiang membuat contoh yang sama
Kesimpulan: Dari hasilnya, kita dapat melihat bahwa pola singleton menyediakan aplikasi yang berorientasi objek dengan titik akses unik untuk suatu objek. Tidak peduli fungsi apa yang diterapkannya, seluruh aplikasi akan berbagi objek instan.
1. Singleton yang lapar
// Kelas Singleton Hungry. Ketika inisialisasi kelas, Singleton1 kelas publik telah dipakai sendiri {// Private Default Constructor Private Singleton1 () {} // Tambahkan private static final singleton1 single = new singleton1 (); // metode statis pabrik public static singleton1 getInstance () {return single; }} 2. Kelas Singleton Malas
// Kelas Singleton Laggy. Instantiate Public Class Singleton2 Ketika dipanggil pertama kali kelas publik singleton2 {// Private Default constructor private singleton2 () {} // Perhatikan bahwa tidak ada single singleton2 private final single = null; // metode statis pabrik yang disinkronkan publik singleton2 getInstance () {if (single == null) {single = new singleton2 (); } return single; }} 3. Kelas Singleton Terdaftar
impor java.util.hashmap; impor java.util.map; // Kelas Singleton Terdaftar. // Mirip dengan metode di musim semi, daftarkan nama kelas dan dapatkan langsung darinya. kelas publik singleton3 {private static Map <string, singleton3> peta = new HashMap <string, singleton3> (); static {singleton3 single = new singleton3 (); peta.put (single.getClass (). getName (), single); } // konstruktor default yang dilindungi singleton3 () {} // metode pabrik statis, kembalikan instance unik kelas ini public static singleton3 getInstance (name string) {if (name == null) {name = singleton3.class.getName (); System.out.println ("name == null"+"---> name ="+name); } if (map.get (name) == null) {coba {map.put (name, (singleton3) class.forname (name) .newInstance ()); } catch (InstantiationException e) {E.PrintStackTrace (); } catch (ilegalAccessException e) {e.printstacktrace (); } catch (ClassNotFoundException e) {E.PrintStackTrace (); }} return map.get (name); } // Metode komersial skema string publik tentang () {return "halo, saya regsingleton."; } public static void main (string [] args) {singleton3 single3 = singleton3.getinstance (null); System.out.println (single3.about ()); }} 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.