Kelas Singleton di Java - Bagaimana Menggunakan Kelas Singleton?



Artikel tentang Kelas Singleton di Java ini membahas tentang berbagai cara di mana kelas dapat dibuat Singleton bersama dengan implementasi praktis.

Di Java, kelas tunggal adalah kelas yang hanya dapat memiliki satu instance pada satu waktu. Ini adalah salah satu dari lima pola Desain Kreasi di Jawa yang membantu dalam pengembangan yang mudah . Melalui media artikel ini, saya akan memberi Anda wawasan yang jelas tentang apa itu kelas tunggal di Java dan bagaimana Anda bisa membuatnya.

Di bawah ini adalah topik yang akan saya bahas dalam artikel ini:





Mari kita mulai.

Apa itu Kelas Singleton di Java?

Dalam istilah awam, kelas Singleton di Java adalah kelas yang memungkinkan akses ke sana melalui satu instance pada satu waktu. Pola desain ini untuk membatasi instansiasi kelas yang tidak perlu dan memastikan hanya satu kelas ada kapan saja per instance JVM. Jadi, dengan pola ini, setiap kelas yang didefinisikan sebagai Singleton hanya memiliki satu contohdengan titik akses global ke sana. Tidak seperti kelas normal, kelas tunggal tidak dimusnahkan pada akhir siklus hidup aplikasi.



metode overloading dan overriding di java

Tetapi mengapa kita membutuhkan Kelas Singleton sejak awal?

Nah, dengan membatasi pembuatan instance kelas, ini menghemat ruang memori karena sekarang objek tidak akan dibuat setiap kali permintaan baru dibuat. Sebaliknya, satu objek akan digunakan berulang kali. Inilah alasan mengapa pola Singleton di Java banyak digunakan dengan dan aplikasi database. Ini pada dasarnya digunakan untuk logging, caching, thread pooling, pengaturan konfigurasi dan banyak lagi.

Saya harap Anda paham dengan konsep kelas Singleton di Java. Jadi, sekarang mari kita lanjutkan lebih jauh dalam hal iniKelas Singleton di artikel Java dan lihat bagaimana mereka dibuat.



Cara Mendesain Kelas Java Singleton

Untuk membuat kelas tunggal di Java, Anda memerlukan tiga hal berikut:

  1. anggota statis kelas
  2. konstruktor pribadi
  3. metode pabrik statis

Sejak Java memungkinkan pengembang menjelajahi cakrawala mereka, itu adasejumlah cara untuk mendesain kelas Singleton. Di bawah ini saya telah membuat daftar yang paling populer.

diploma pasca sarjana vs master
  1. Metode Inisialisasi bersemangat
  2. Metode Inisialisasi Malas
  3. Thread Safe Singleton Method
  4. Inisialisasi Malas dengan Metode Kunci Ganda
  5. Metode Pemuatan Malas
  6. Metode Inisialisasi Blok Statis

Sekarang mari selami lebih dalam setiap pendekatan ini satu per satu.

1. Metode Inisialisasi Semangat

Ini adalah metode termudah untuk membuat kelas Singleton tempat instance dibuat pada saat pemuatan kelas. Untuk membuat kelas tunggal menggunakan metode ini, Anda perlu mengikuti langkah-langkah yang disebutkan di bawah ini:

  1. Deklarasikan konstruktor sebagai pribadi.
  2. Langkah selanjutnya adalah membuat anggota kelas privat untuk kelas Singleton ini.
  3. Sekarang, Anda perlu mendefinisikan metode pabrik yang akan digunakan untuk mengembalikan objek kelas Anda, yang telah kami buat sebagai turunan dari anggota kelas.
  4. Anda bahkan dapat mendeklarasikan publik anggota statis jika Anda ingin mengakses instance statis ini secara langsung.

Sekarang, mari kita lihat cara menerapkannya.

// Inisialisasi Eager kelas publik EagerSingleton {private static final EagerSingleton INSTANCE = new EagerSingleton () private EagerSingleton () {} public static EagerSingleton getInstance () {return INSTANCE}}

Jika Anda melihat kodenya, Anda dapat mengamati bahwa setiap kali kita membuat instance objek, kita menggunakan filegetInstance ()metode daripada memanggil kelas pembangun .Tapi itu memiliki kekurangannya sendiri. Jika Anda menggunakan metode ini untuk membuat kelas tunggal, maka sebuah instance akan dibuat terlepas dari fakta apakah aplikasi sedang menggunakannya atau tidak.

Jadi, mari kita lanjutkan dan lihat cara lain untuk membuat kelas tunggal di Java.

2. Metode Inisialisasi Malas

Metode ini disebut inisialisasi malas karena menunda pembuatan instance kelas hingga penggunaan pertama. Yang saya maksud adalah, dengan metode ini, sebuah objek dibuat hanya jika diperlukan. Ini membantu dalam menghindari pembuatan file . Untuk mendesain kelas tunggal dengan cara ini, Anda perlu mengikuti langkah-langkah yang tercantum di bawah ini:

  1. Pertama-tama, nyatakan konstruktor sebagai privat.
  2. Kemudian Anda perlu membuat instance statis pribadi untuk kelas ini, tetapi belum perlu membuat instance-nya.
  3. Terakhir, buat metode pabrik yang akan memeriksa apakah anggota instance null atau tidak. Jika tidak, maka itu akan membuat turunan kelas singleton untuk Anda dan mengembalikannya.

Kode di bawah ini menunjukkan bagaimana melakukan ini.

// Lazy Initialization public class LazySingleton {private static LazySingleton INSTANCE = null private LazySingleton () {} public static LazySingleton getInstance () {if (INSTANCE == null) {synchronized (LazySingleton.class) {INSTANCE = new LazySingleton ()}} kembali INSTANCE}}

3. Thread Safe Singleton metode

Tetapi pendekatan di atas dapat menimbulkan beberapa kekhawatiran dalam skenario bersamaan. Karena pola singleton terutama digunakan dengan multi-utas dan ifbeberapa utas masuk ke kondisi if pada saat yang sama dapat menimbulkan masalah. Untuk menghindari hal ini, kami mencoba membuat kelas tunggal yang aman untuk thread dengan menyinkronkan metode akses global. Ini memastikan bahwa hanya satu utas yang menjalankan metode ini pada suatu waktu. Lihat kode di bawah ini untuk melihat implementasinya:

// Thread Safe Singleton kelas publik ThreadSafeSingleton {private static ThreadSafeSingleton INSTANCE private ThreadSafeSingleton () {} public static tersinkronisasi ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = new ThreadSafeSingleton ()} return INSTANCE}}

Tetapi kadang-kadang pendekatan ini juga bisa menjadi sangat rumit karena setiap kali metodedipanggil, ia harus menunggu kunci dilepaskan sebelum metode dapat menggunakannya. Ini menghasilkan memperlambat proses dan membawa kita ke pendekatan berikutnyaInisialisasi Malas dengan Double Lock.

4. Inisialisasi Malas dengan Double Lock metode

Dalam pendekatan ini, kami tidak menyinkronkan metode. Sebaliknya kita membungkus kode pembuatan objek dalam blok tersinkronisasi.Anda dapat mengatakannya dengan memeriksa kunci utas sebelumnya, itumengurangi jumlah akuisisi kunci. Pendekatan ini biasanya menghasilkan peningkatan kinerja aplikasi. Lihat kode di bawah ini untuk melihat bagaimana itu dilakukan.

// Inisialisasi Lazy dengan Double Lock public class LazyDoubleLockSingleton {private static LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synchronized (LazyDoubleLockSingleton.class) {= if (INSTANCE == null) null) {INSTANCE = new LazyDoubleLockSingleton ()}}} kembalikan INSTANCE}}

5. Metode Beban Malas

Metode ini didasarkan pada JSL (Spesifikasi Bahasa Java) dan menurut ini akan memuat anggota data statis hanya jika diperlukan. Jadi, saat kelas tunggal Anda dimuat ke JVM, tidak ada instance yang dibuat. Selanjutnya, selama eksekusi program, metode global dipanggil secara berurutan. Dengan metode ini, Anda tidak perlu secara eksplisit menyinkronkan getInstance () statis untuk memuat dan menginisialisasi. Anggota kelas statis akan dipanggil dengan cara yang diurutkan dengan benar, pemanggilan serentak lainnya dari metode global dikembalikan dalam urutan yang sama tanpa harus melakukan overhead sinkronisasi.

Di bawah ini adalah kode untuk melakukan hal yang sama.

// Metode Pemuatan Lambat kelas publik LazyLoadSingleton {private LazyLoadSingleton () {} kelas statis pribadi SingletonClassHolder {static final Var INSTANCE = new LazyLoadSingleton ()} public static LazyLoadSingleton getInstance () {return SingletonClassHolder.INSTANCE}}

6. Metode Inisialisasi Blok Statis

Metode pembuatan kelas tunggal di Java ini adalahmirip dengan metode inisialisasi bersemangat. Satu-satunya perbedaan adalah bahwa instance untuk kelas ini dibuat dalam blok statis yang memiliki Kegunaan.

// Static Block Initialization public class StaticBlockSingleton {private static StaticBlockSingleton INSTANCE private StaticBlockSingleton () {} // penanganan pengecualian dalam blok statis static {coba {INSTANCE = new StaticBlockSingleton ()} catch (Exception e) {throw new RuntimeException ('Exception terjadi sambil membuat Kelas Singleton ')}} public static StaticBlockSingleton getInstance () {return INSTANCE}}

Ini membawa kita ke bagian akhir artikel ini tentang kelas Singleton di Java. Jika Anda ingin tahu lebih banyak tentang Java, Anda dapat merujuk ke kami .

Sekarang Anda telah memahami apa itu kelas Singleton di Java, lihat oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus pelatihan dan sertifikasi Java J2EE dan SOA Edureka dirancang untuk siswa dan profesional yang ingin menjadi Pengembang Java. Kursus ini dirancang untuk memberi Anda permulaan dalam pemrograman Java dan melatih Anda untuk konsep Java inti dan lanjutan bersama dengan berbagai kerangka kerja Java seperti Hibernate & Spring.

implementasi hashmap dalam kode java

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar di artikel 'Kelas Singleton di Java' ini dan kami akan menghubungi Anda kembali secepatnya.