Desain Singleton Pola
Oleh
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.
Category
Komentar