Mode singleton
Motivasi kadang -kadang penting untuk memiliki hanya satu contoh kelas. Misalnya, suatu sistem seharusnya hanya memiliki satu instance manajemen jendela.
Pola Singleton adalah pola desain paling sederhana: kelas ini bertanggung jawab untuk instantiasi dirinya sendiri, memastikan bahwa hanya ada satu contoh, dan menyediakan entri untuk mengakses instance ini.
Tujuan
1. Pastikan hanya satu contoh yang dibuat.
2. Memberikan entri untuk mengakses instance ini.
Gunakan final untuk memastikan itu dibuat sekali, dan konstruktor pribadi memastikan tidak dipakai. Metode getInstance publik memastikan bahwa akses eksternal dimungkinkan. Berikut ini adalah mode lapar:
Singleton kelas publik {private static final singleton instance = singleton baru (); private singleton () {} public static singleton getInstance () {return instance; }}
Mode malas:
kelas publik singletondemo {private static volatile singletondemo instance = null; private singletondemo () {} public static singletondemo getInstance () {if (instance == null) {disinkronkan (singletondemo .class) {if (instance == null) {instance = new singletondemo (); }} return instance; }}
Skenario dan contoh yang berlaku
1. Kelas logger mencegah pembuatan instance logger setiap kali log dicetak.
2. Kelas kontrol, umumnya hanya ada satu contoh kontrol di seluruh sistem.
Masalah dan implementasi khusus
1. Mode singleton yang aman dan kuat harus aman.
2. Mode Lazy menggunakan mekanisme kunci ganda.
3. Mode Eagle menggunakan variabel statis dan dipakai saat program dimuat, memastikan bahwa hanya ada satu contoh.
4. Metode abstrak pabrik dan pabrik biasanya dirancang sebagai pola singleton untuk memastikan bahwa hanya ada satu pabrik.
5. Saat menggunakan serialisasi dan deserialisasi, banyak instance akan dibuat. Gunakan fungsi ReadResolve untuk menghindari ini, tetapi sebaiknya tidak menggunakan serialisasi.
Singleton kelas publik mengimplementasikan serializable {... // metode ini dipanggil segera setelah objek kelas ini diuraikan. // Metode ini mengembalikan instance singleton. objek yang dilindungi readResolve () {return getInstance (); }}
Poin -poin penting
1. Dalam program multi-utas, perhatikan sinkronisasi data.
2. Saat serial, gunakan metode ReadResolve untuk mengembalikan instance untuk menghindari banyak objek yang dibuat.
3. Jika dimuat oleh beberapa loader kelas, beberapa instance akan dibuat.
Mode Pabrik Sederhana
Model pabrik yang sederhana dari motivasi adalah dasar dan implementasi awal dari metode abstrak pabrik dan pabrik.
Tujuan
1. Jangan mengungkapkan rincian instantiasi objek kepada klien.
2. Buat objek melalui antarmuka umum.
menyelesaikan
Implementasinya sangat sederhana:
1. Ketika klien membutuhkan produk, itu tidak menggunakan yang baru untuk membuatnya, tetapi memberikan deskripsi produk ke pabrik, yang memungkinkan pabrik menyediakan produk baru.
2. Factory membuat produk untuk klien.
3. Klien menggunakan produk abstrak, tanpa peduli dengan implementasi konkret produk.
Contoh
1. Program Menggambar untuk Bentuk Menggambar. Bentuknya adalah antarmuka produk, dan segitiga adalah produk konkret. Kami dapat membuat pabrik dan kemudian membuat produk sesuai dengan deskripsi pelanggan. Namun, saat menambahkan bentuk baru, kita perlu memodifikasi kelas pabrik.
Masalah dan implementasi khusus
1. Saat menambahkan produk baru, pabrik perlu dimodifikasi.
Public Class ProductFactory {Public Product CreateProduct (String ProductID) {if (id == id1) mengembalikan OneProduct baru (); if (id == id2) mengembalikan produk lain yang lain (); ... // seterusnya untuk ID lain mengembalikan null; // Jika ID tidak memiliki nilai yang diharapkan} ...}Secara umum, kami menggunakan pernyataan IF untuk menilai deskripsi produk dan instantiate produk yang berbeda. Ketika ada produk baru, kita perlu menambahkan penilaian baru. Masalah ini dapat diselesaikan dengan pola pabrik abstrak.
Meringkaskan
1. Gunakan hanya saat Anda benar -benar membutuhkan mode pabrik, jika tidak itu hanya akan meningkatkan kompleksitas program. Misalnya, ketika banyak objek memiliki tipe dasar yang serupa, Anda dapat mempertimbangkan untuk menggunakan mode pabrik sederhana untuk membuat objek secara seragam.
2. Pabrik sederhana memiliki lebih banyak pernyataan cabang penilaian, yang melanggar prinsip pembukaan dan penutupan modifikasi. Oleh karena itu, bijaksana untuk menggunakan mode pabrik sederhana untuk beberapa program tetap dan sederhana, dan menggunakan mode abstrak pabrik atau mode metode pabrik untuk beberapa program yang kompleks dan sering diperluas.