JavaRush /Java Blog /Random-ID /Pola dan Singleton - untuk semua orang yang pertama kali ...

Pola dan Singleton - untuk semua orang yang pertama kali menemukannya

Dipublikasikan di grup Random-ID
Artikel ini ditujukan bagi mereka yang pertama kali mengenal konsep pola, mendengar tentang Singleton'e, atau membuatnya, tetapi masih belum memahami apa pun. Selamat datang! Siswa JavaRush menemukan pola untuk pertama kalinya di level 15, ketika tiba-tiba topi meminta untuk "memperbaiki" dan menerapkan pola Singletondengan implementasi yang lambat. Siswa yang baru pertama kali mendengarnya Singletonlangsung bertanya-tanya: apa itu pola, mengapa diperlukan, pola seperti apa, Singletondan terakhir, penerapan malas seperti apa ini. Mari kita mulai menjawab secara berurutan: Pola dan Singleton - untuk semua orang yang pertama kali menemukannya - 1

Apa sih polanya?

Untuk pemahaman yang lebih baik, saya pikir ada baiknya menjawab pertanyaan dari sejarah ini. Di antara para programmer ada empat penulis terkenal: Erich Gamma, Richard Helm, Ralph Johnson dan John Vlissides, yang mengemukakan ide menarik.
Pola dan Singleton - untuk semua orang yang pertama kali menemukannya - 2
Mereka memperhatikan bahwa ketika menulis program, mereka sering kali harus menyelesaikan masalah yang kira-kira sama dan menulis kode dengan tipe struktur yang sama. Oleh karena itu, mereka memutuskan untuk menggambarkan pola-pola tersebut dalam bentuk pola-pola khas yang sering digunakan dalam pemrograman berorientasi objek. Buku tersebut diterbitkan pada tahun 1995 dengan judul “Teknik Desain Berorientasi Objek. Pola desain" . Judul bukunya ternyata terlalu panjang, sehingga dikenal dengan judul Buku Geng Empat . Pada edisi pertama, 23 pola diterbitkan, setelah itu puluhan pola lainnya ditemukan. Jadi, untuk menjawab pertanyaan di paragraf ini, “Apa itu pola?” , mari kita rangkum dalam beberapa kata saja:
Pola adalah solusi standar untuk masalah umum.
Dan Singletonini hanyalah salah satu dari pola tersebut.

Mengapa kita membutuhkan pola (pola desain)

Anda dapat memprogram tanpa mengetahui polanya; Anda dapat memverifikasi ini hanya dengan menyadari fakta bahwa pada level 15 di JavaRush Anda telah menulis ratusan program mini tanpa mengetahui apa pun tentang keberadaannya. Hal ini menunjukkan bahwa suatu pola adalah sejenis alat, yang keberadaannya membedakan seorang master dari seorang amatir:
Pola dan Singleton - untuk semua orang yang pertama kali menemukannya - 3
Pola tersebut menjelaskan cara memecahkan salah satu masalah umum dengan benar. Hasilnya, mengetahui polanya menghemat waktu Anda. Sebuah analogi dapat dibuat dengan algoritma. Misalnya, Anda dapat membuat algoritma pengurutan Anda sendiri dengan blackjack dan angka dan menghabiskan banyak waktu untuk itu, atau Anda dapat menggunakan algoritma yang telah dijelaskan sejak lama dan menerapkannya. Sama halnya dengan pola. Ditambah lagi, dengan penggunaan pola, kode menjadi lebih terstandarisasi, dan bila menggunakan pola yang tepat, kemungkinan kesalahan Anda akan lebih kecil, karena kesalahan tersebut sudah diramalkan dan dihilangkan dalam pola ini. Ditambah lagi, pengetahuan tentang pola memungkinkan pemrogram untuk lebih memahami satu sama lain. Cukup menyebutkan nama template saja sudah cukup, daripada mencoba menjelaskan kepada sesama pemrogram apa yang Anda ingin mereka lakukan. Jadi, untuk meringkas, pola desain membantu:
  • jangan menemukan kembali roda, tetapi gunakan solusi standar;
  • standarisasi kode;
  • membakukan terminologi;
Sebagai penutup bagian ini, kami mencatat bahwa seluruh variasi pola dapat disederhanakan menjadi tiga kelompok besar:
Pola dan Singleton - untuk semua orang yang pertama kali menemukannya - 4

Akhirnya pola Singleton

Singletonmengacu pada pola generatif . Terjemahan literalnya adalah penyendiri. Pola ini memastikan bahwa suatu kelas hanya memiliki satu objek (satu instance kelas) dan titik akses global disediakan untuk objek tersebut. Dari uraiannya harus jelas bahwa pola ini harus digunakan dalam dua kasus:
  1. ketika tidak lebih dari satu objek dari kelas mana pun harus dibuat dalam program Anda. Misalnya, dalam permainan komputer Anda memiliki kelas “Karakter”, dan kelas ini seharusnya hanya memiliki satu objek yang menggambarkan karakter itu sendiri.

  2. ketika Anda perlu menyediakan titik akses global ke objek kelas. Dengan kata lain, Anda perlu memastikan bahwa objek tersebut dipanggil dari mana saja dalam program. Dan sayangnya, untuk ini tidak cukup hanya membuat variabel global, karena tidak dilindungi penulisan dan siapa pun dapat mengubah nilai variabel ini dan titik akses global ke objek tersebut akan hilang. Properti ini Singletondiperlukan, misalnya, ketika Anda memiliki objek kelas yang bekerja dengan database, dan Anda memerlukan database agar dapat diakses dari berbagai bagian program. Dan Singletonitu akan menjamin bahwa tidak ada kode lain yang menggantikan instance kelas yang dibuat sebelumnya.
Kedua masalah ini diselesaikan dengan cara Singleton: harus ada hanya satu objek dalam program dan harus ada akses global terhadapnya. Pada contoh di level 15, cap meminta untuk mengimplementasikan pola ini untuk tugas berikut (berikut uraiannya):
Pola dan Singleton - untuk semua orang yang pertama kali menemukannya - 5
Setelah membaca kondisi dengan cermat, menjadi jelas mengapa Singleton(Single) dibutuhkan di sini. Lagi pula, program ini meminta Anda untuk membuat satu objek untuk setiap kelas: Sun, Moon, Earth. Dan masuk akal untuk berasumsi bahwa setiap kelas dalam program ini tidak boleh membuat lebih dari satu Matahari/Bulan/Bumi, jika tidak maka akan menjadi tidak masuk akal, kecuali tentu saja Anda menulis Star Wars versi Anda sendiri. Fitur implementasi SingletonJava dalam tiga langkah Perilaku singleton di Java tidak dapat diimplementasikan menggunakan konstruktor biasa karena konstruktor selalu mengembalikan objek baru. Oleh karena itu, semua implementasi Singleton'a dilakukan dengan menyembunyikan konstruktor dan membuat metode statis publik yang akan mengontrol keberadaan satu objek dan "menghancurkan" semua objek yang baru muncul. Jika Singleton'a dipanggil, ia harus membuat objek baru (jika belum ada dalam program) atau mengembalikan objek yang sudah dibuat. Untuk melakukan ini: #1. – Anda perlu menambahkan bidang statis pribadi ke kelas yang berisi satu objek:
public class LazyInitializedSingleton {
	private static LazyInitializedSingleton instance; //#1
}
#2. – Menjadikan konstruktor kelas (konstruktor default) pribadi (sehingga akses ke sana ditutup di luar kelas, maka tidak akan dapat mengembalikan objek baru):
public class LazyInitializedSingleton {
	private static LazyInitializedSingleton instance;
private LazyInitializedSingleton(){} // #2
}
#3 . – Deklarasikan metode pembuatan statis yang akan digunakan untuk mendapatkan singleton:
public class LazyInitializedSingleton {
    private static LazyInitializedSingleton instance;
        private LazyInitializedSingleton(){}
        public static LazyInitializedSingleton getInstance(){ // #3
        if(instance == null){		//if the object has not been created yet
            instance = new LazyInitializedSingleton();	//create a new object
        }
        return instance;		// return the previously created object
    }
}
Contoh di atas agak kikuk, karena kita hanya menyembunyikan konstruktor dan menyediakan metode kita sendiri, bukan konstruktor standar. Karena artikel ini bertujuan untuk memungkinkan siswa JavaRush bersentuhan dengan pola ini (dan pola secara umum) untuk pertama kalinya, fitur implementasi Singleton yang lebih kompleks tidak akan diberikan di sini. Kami hanya mencatat bahwa tergantung pada kompleksitas program, penyempurnaan pola ini yang lebih rinci mungkin diperlukan. Misalnya, dalam lingkungan multi-utas (lihat topik Utas), beberapa utas berbeda dapat secara bersamaan memanggil metode pengambil Singleton, dan kode yang dijelaskan di atas akan berhenti berfungsi, karena setiap utas akan dapat membuat beberapa instance kelas. sekaligus. Oleh karena itu, masih ada beberapa pendekatan berbeda untuk membuat singleton Thread-safe yang benar. Tapi itu cerita lain =) Dan akhirnya. Apa Inisialisasi Malas yang diminta oleh topi ? Inisialisasi Malas juga disebut inisialisasi malas. Ini adalah teknik pemrograman di mana operasi intensif sumber daya (dan pembuatan objek adalah operasi intensif sumber daya) dilakukan sesuai permintaan, bukan terlebih dahulu. Yang pada dasarnya adalah apa yang terjadi dalam kode kita Singleton'a. Dengan kata lain, objek kita dibuat pada saat diakses, dan bukan sebelumnya. Tidak boleh diasumsikan bahwa konsep inisialisasi malas terkait erat dengan Singleton'om. Inisialisasi malas juga digunakan dalam pola desain generatif lainnya, misalnya dalam Metode Proxy dan Pabrik, tapi lain ceritanya =) Sumber berikut digunakan dalam mempersiapkan artikel:
  1. Praktik Terbaik Pola Desain Java Singleton dengan Contoh
  2. Pola desain
  3. Benar Singleton di Jawa
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION