Kelas Singleton di Java - Bagaimana Menggunakan Kelas Singleton?



Artikel ini mengenai Singleton Class di Java membicarakan berbagai cara di mana sebuah kelas dapat dibuat Singleton bersama dengan implementasi yang praktis.

Di Jawa, kelas singleton adalah kelas yang hanya dapat memiliki satu kejadian pada waktu tertentu. Ini adalah salah satu daripada lima corak Reka Bentuk Penciptaan di Jawa yang membantu dalam pengembangan . Melalui media artikel ini, saya akan memberi anda gambaran yang jelas mengenai apa itu kelas tunggal di Jawa dan bagaimana anda boleh membuatnya.

Berikut adalah topik yang akan saya bahas dalam artikel ini:





bagaimana mencari nombor terbesar dalam array java

Mari kita mulakan.

Apa itu Kelas Singleton di Jawa?

Dalam istilah awam, kelas Singleton di Java adalah kelas yang membolehkan akses ke dalamnya melalui satu contoh pada satu masa. Corak reka bentuk ini adalah untuk menyekat keadaan kelas yang tidak perlu dan memastikan hanya satu wujud pada bila-bila masa setiap kejadian JVM. Oleh itu, dengan corak ini, mana-mana kelas yang didefinisikan sebagai Singleton hanya mempunyai satu contohdengan titik akses global ke sana. Tidak seperti kelas biasa, kelas singleton tidak akan hancur pada akhir kitaran hidup aplikasi.



Tetapi mengapa kita memerlukan Kelas Singleton di tempat pertama?

Nah, dengan menyekat pembuatan contoh kelas, ia akan menjimatkan ruang memori kerana sekarang objek tidak akan dibuat setiap kali permintaan baru dibuat. Sebaliknya, satu objek akan digunakan berulang kali. Inilah sebabnya mengapa pola Singleton di Jawa digunakan dan aplikasi pangkalan data. Ia pada dasarnya digunakan untuk log, caching, penyatuan benang, tetapan konfigurasi dan banyak lagi.

Saya harap anda jelas dengan konsep kelas Singleton di Jawa. Oleh itu, mari kita teruskan lebih jauh dalam hal iniArtikel Singleton Class di Java dan lihat bagaimana mereka dibuat.



Kaedah Merangka Kelas Singleton Java

Untuk membuat singleton kelas di Java, anda memerlukan tiga perkara berikut:

  1. ahli kelas yang statik
  2. pembina swasta
  3. kaedah kilang statik

Oleh kerana Java membolehkan para pemaju menjelajah cakrawala mereka, adabeberapa cara di mana anda boleh merancang kelas Singleton. Di bawah ini saya telah menyenaraikan yang paling popular.

  1. Kaedah Permulaan Bersemangat
  2. Kaedah Permulaan Malas
  3. Kaedah Singleton Selamat Benang
  4. Permulaan Malas dengan Kaedah Kunci Berganda
  5. Kaedah Beban Malas
  6. Kaedah Permulaan Blok Statik

Mari kita selami lebih mendalam setiap pendekatan ini satu persatu.

1. Kaedah Permulaan Bersemangat

Ini adalah kaedah termudah untuk membuat kelas Singleton di mana contoh dibuat pada masa pemuatan kelas. Untuk membuat kelas tunggal menggunakan kaedah ini, anda perlu mengikuti langkah-langkah yang disebutkan di bawah:

  1. Menyatakan pembinaan secara peribadi.
  2. Langkah seterusnya adalah membuat ahli kelas peribadi untuk kelas Singleton ini.
  3. Sekarang, anda perlu menentukan kaedah kilang yang akan digunakan untuk mengembalikan objek kelas anda, yang telah kami buat sebagai contoh anggota kelas.
  4. Anda bahkan boleh mengisytiharkan anggota statik sebagai orang awam jika anda ingin mengakses contoh statik ini secara langsung.

Sekarang, mari kita lihat bagaimana melaksanakannya.

// EagerSingleton kelas awam Initialization EagerSingleton {static final EagerSingleton INSTANCE = EagerSingleton baru () EagerSingleton swasta () {} EagerSingleton getInstance () {return INSTANCE}}

Sekiranya anda melihat kodnya, anda dapat melihat bahawa setiap kali kita membuat objek yang kita gunakangetInstance ()kaedah daripada memanggil kelas pembina .Tetapi ia mempunyai kekurangannya sendiri. Sekiranya anda menggunakan kaedah ini untuk membuat singleton kelas, maka contoh akan dibuat tanpa mengira hakikat sama ada aplikasi menggunakannya atau tidak.

Oleh itu, mari maju dan lihat cara lain untuk membuat kelas singleton di Java.

2. Kaedah Permulaan Malas

Kaedah ini disebut inisialisasi malas kerana menangguhkan penciptaan instance kelas hingga penggunaan pertama. Apa yang saya maksudkan adalah, dengan kaedah ini, objek dibuat hanya jika diperlukan. Ia membantu mengelakkan penciptaan yang tidak perlu . Untuk merancang kelas singleton dengan cara ini, anda perlu mengikuti langkah-langkah berikut:

tag html untuk memasukkan jeda baris
  1. Pertama sekali, nyatakan pembina sebagai peribadi.
  2. Oleh itu, anda perlu membuat contoh statik peribadi untuk kelas ini tetapi tidak perlu membuat contohnya lagi.
  3. Akhirnya, buat kaedah kilang yang pertama-tama akan memeriksa sama ada ahli contoh itu kosong atau tidak. Sekiranya tidak, ia akan membuat contoh kelas singleton untuk anda dan mengembalikannya.

Kod di bawah menunjukkan cara melaksanakannya.

// Lazy Initialization kelas awam LazySingleton {private static LazySingleton INSTANCE = null private LazySingleton () {} public static LazySingleton getInstance () {if (INSTANCE == null) {disegerakkan (LazySingleton.class) {INSTANCE = baru LazySingleton () kembali INSTANCE}}

3. Singleton Selamat Benang Kaedah

Tetapi pendekatan di atas dapat menimbulkan beberapa kebimbangan dalam senario serentak. Oleh kerana corak singleton digunakan terutamanya dengan pelbagai utas dan jikabeberapa utas memasuki keadaan if pada masa yang sama dapat menimbulkan masalah. Untuk mengelakkan ini, kami cuba membuat kelas single-safe benang dengan menjadikan kaedah akses global diselaraskan. Ini memastikan bahawa hanya satu utas yang melaksanakan kaedah ini pada bila-bila masa. Rujuk kod di bawah untuk melihat pelaksanaannya:

javascript memeriksa panjang tatasusunan
// Thread Safe Singleton kelas awam ThreadSafeSingleton {private static ThreadSafeSingleton INSTANCE peribadi ThreadSafeSingleton () {} awam yang disegerakkan statik ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = ThreadSafeSingleton baru ()} kembali INSTANCE

Tetapi kadang-kadang pendekatan ini juga boleh menjadi sangat membebankan kerana setiap kali kaedah inidipanggil, perlu menunggu kunci dilepaskan sebelum kaedah dapat menggunakannya. Ini menghasilkan proses yang perlahan dan membawa kita ke pendekatan seterusnya iaituPermulaan Malas dengan Kunci Berganda.

4. Permulaan Malas dengan Kunci Berganda Kaedah

Dalam pendekatan ini, kami tidak menyegerakkan kaedah. Sebaliknya, kami memasukkan kod penciptaan objek dalam blok yang disegerakkan.Anda boleh mengatakan bahawa dengan memeriksa kunci benang sebelumnya, itumengurangkan bilangan pemerolehan kunci. Pendekatan ini biasanya menghasilkan peningkatan prestasi aplikasi. Lihat kod di bawah untuk melihat bagaimana ia dilakukan.

// Permulaan Lazy dengan kelas awam Double Lock LazyDoubleLockSingleton {peribadi statik LazyDoubleLockSingleton INSTANCE = null peribadi LazyDoubleLockSingleton () {} awam statik LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {disinkronkan (LazyDoubleLock = { null) {INSTANCE = LazyDoubleLockSingleton baru ()}}} pulangkan INSTANCE}}

5. Kaedah Beban Malas

Kaedah ini berdasarkan JSL (Spesifikasi Bahasa Java) dan sesuai dengan ini akan memuatkan anggota data statik hanya apabila diperlukan. Oleh itu, apabila kelas singleton anda dimuat ke JVM, tidak ada contoh yang dibuat. Selanjutnya, selama pelaksanaan program, kaedah global digunakan secara berurutan. Dengan kaedah ini, anda tidak perlu menyegerakkan secara eksplisit getInstance () untuk memuat dan memulakan. Anggota kelas statik akan dipanggil dengan cara urutan yang betul, selebihnya seruan serentak kaedah global dikembalikan dalam urutan yang sama tanpa harus melakukan overhead penyegerakan.

Di bawah ini adalah kod untuk melakukan perkara yang sama.

// Lazy Load Method kelas awam LazyLoadSingleton {private LazyLoadSingleton () {} kelas statik persendirian SingletonClassHolder {static final Var INSTANCE = LazyLoadSingleton baru ()} awam statik LazyLoadSingleton getInstance () {return SingletonClassHolder.INSTANCE}}

6. Kaedah Permulaan Blok Statik

Kaedah membuat kelas singleton di Java adalahsama dengan kaedah inisialisasi bersemangat. Satu-satunya perbezaan adalah bahawa contoh untuk kelas ini dibuat dalam blok statik yang dimiliki kefungsian.

// StaticBlockSingleton kelas awam Initialization StaticBlockSingleton {static staticBlockSingleton swasta staticBlockSingleton () {} // pengendalian pengecualian dalam blok statik statik {cuba {INSTANCE = tangkapan StaticBlockSingleton baru ()} (Pengecualian e) {lemparkan RuntimeException baru ('Pengecualian berlaku semasa membuat Singleton Class ')}} StaticBlockSingleton getInstance statik awam () {return INSTANCE}}

Ini membawa kita ke akhir artikel ini mengenai kelas Singleton di Jawa. Sekiranya anda ingin mengetahui lebih lanjut mengenai Java, anda boleh merujuk kepada kami .

Sekarang setelah anda memahami apa itu kelas Singleton di Java, lihat oleh Edureka, sebuah syarikat pembelajaran dalam talian yang dipercayai dengan rangkaian lebih daripada 250,000 pelajar berpuas hati yang tersebar di seluruh dunia. Kursus latihan dan pensijilan Java J2EE dan SOA Edureka dirancang untuk pelajar dan profesional yang ingin menjadi Pembangun Java. Kursus ini dirancang untuk memberi Anda awal dalam pengaturcaraan Java dan melatih anda untuk konsep Java teras dan maju bersama dengan pelbagai kerangka kerja Java seperti Hibernate & Spring.

Ada soalan untuk kami? Sila sebutkan di bahagian komen dari artikel 'Kelas Singleton di Jawa' ini dan kami akan menghubungi anda secepat mungkin.