Desain Singleton Pola

chmood
Β  Β Pastikan kelas hanya memiliki satu contoh, dan memberikan titik global akses ke sana.
Dikemas "just-in-time inisialisasi" atau "inisialisasi pada penggunaan pertama".
Masalah
Aplikasi membutuhkan satu, dan hanya satu, contoh dari obyek. Selain itu, inisialisasi malas dan akses global yang diperlukan.

Β  Β Membuat kelas satu contoh objek bertanggung jawab untuk penciptaan, inisialisasi, akses, dan penegakan hukum. Mendeklarasikan contoh sebagai anggota data statis swasta. Menyediakan fungsi anggota statis publik yang merangkum semua kode inisialisasi, dan menyediakan akses ke instance.

Klien memanggil fungsi accessor (menggunakan nama kelas dan resolusi lingkup operator) setiap kali referensi ke instance tunggal diperlukan.

Singleton harus dipertimbangkan hanya jika semua tiga dari kriteria berikut ini terpenuhi:

Kepemilikan satu contoh tidak dapat cukup ditugaskan
Inisialisasi malas diinginkan
Akses global tidak ditentukan lain untuk
Jika kepemilikan satu contoh, kapan dan bagaimana inisialisasi terjadi, dan akses global tidak masalah, Singleton tidak cukup menarik.

Pola Singleton dapat diperpanjang untuk mendukung akses ke nomor-aplikasi spesifik contoh.

"Fungsi anggota statis accessor" Pendekatan tidak akan mendukung subclassing dari kelas Singleton. Jika subclassing diinginkan, lihat pembahasan dalam buku ini.

Menghapus Singleton kelas / contoh adalah masalah desain non-sepele. Lihat "To Kill A Singleton" oleh John Vlissides untuk diskusi.


Struktur

Membuat kelas dari contoh tunggal bertanggung jawab untuk akses dan "inisialisasi pada penggunaan pertama". Single misalnya adalah atribut statis pribadi. Fungsi accessor adalah metode statis publik.

Contoh
Β  Β Pola Singleton memastikan bahwa kelas hanya memiliki satu contoh dan memberikan titik global akses ke contoh. Hal ini dinamai set tunggal, yang didefinisikan sebagai satu set yang berisi satu elemen. Kantor Presiden Amerika Serikat adalah Singleton. Konstitusi Amerika Serikat menentukan sarana yang seorang presiden terpilih, membatasi masa jabatan, dan mendefinisikan urutan suksesi. Akibatnya, bisa ada paling banyak satu presiden aktif pada waktu tertentu. Terlepas dari identitas pribadi dari presiden aktif, judul, "Presiden Amerika Serikat" adalah titik global akses yang mengidentifikasi orang di kantor.

Periksa daftar
Β  Β Mendefinisikan atribut statis swasta di "satu contoh" class.
Mendefinisikan fungsi accessor publik statis di kelas.
Apakah "malas inisialisasi" (ciptaan pada penggunaan pertama) dalam fungsi accessor.
Mendefinisikan semua konstruktor harus dilindungi atau swasta.
Klien hanya dapat menggunakan fungsi accessor untuk memanipulasi Singleton.
Aturan praktis
Abstrak Pabrik, Builder, dan Prototype dapat menggunakan Singleton dalam pelaksanaannya.
Benda fasad sering lajang karena hanya satu objek fasad diperlukan.
Benda negara sering lajang.
Keuntungan dari Singleton lebih variabel global adalah bahwa Anda benar-benar yakin jumlah kasus ketika Anda menggunakan Singleton, dan, Anda dapat mengubah pikiran Anda dan mengelola sejumlah kasus.
Pola desain Singleton adalah salah satu pola yang paling tidak tepat digunakan. Lajang dimaksudkan untuk digunakan saat kelas harus memiliki tepat satu contoh, tidak lebih, tidak kurang. Desainer sering menggunakan lajang dalam upaya salah arah untuk menggantikan variabel global. Sebuah Singleton adalah, untuk maksud dan tujuan, variabel global. Singleton tidak melakukan jauh dengan global; itu hanya mengganti nama itu.
Kapan Singleton tidak perlu? Jawaban singkat: sebagian besar waktu. Jawaban panjang: ketika itu sederhana untuk lulus sumber daya objek sebagai referensi untuk objek yang membutuhkannya, daripada membiarkan benda mengakses sumber daya global. Masalah sebenarnya dengan lajang adalah bahwa mereka memberi Anda seperti alasan yang baik untuk tidak berpikir hati-hati tentang visibilitas yang tepat dari sebuah objek. Menemukan keseimbangan yang tepat dari paparan dan perlindungan untuk objek sangat penting untuk mempertahankan fleksibilitas.
Kelompok kami memiliki kebiasaan buruk menggunakan data global, jadi saya melakukan kelompok studi di Singleton. Hal berikutnya yang saya tahu lajang muncul di mana-mana dan tidak ada masalah yang terkait dengan data global pergi. Jawaban untuk pertanyaan data global tidak, "Buatlah sebuah Singleton." Jawabannya adalah, "Mengapa di neraka yang Anda gunakan data global?" Mengubah nama tidak mengubah masalah. Bahkan, hal itu mungkin membuat lebih buruk karena memberikan Anda kesempatan untuk mengatakan, "Yah aku tidak melakukan itu, aku melakukan ini" - meskipun ini dan itu adalah hal yang sama.




Komentar