Obyek Null Desain Pola
Oleh
chmood
Maksud dari Obyek Null adalah untuk merangkum adanya obyek
dengan menyediakan alternatif disubstitusikan yang menawarkan standar cocok
melakukan perilaku apa-apa. Singkatnya, sebuah desain di mana "tidak akan
datang dari apa-apa"
Menggunakan pola Obyek Null saat
sebuah objek membutuhkan kolaborator. Pola Obyek Null tidak
memperkenalkan kolaborasi ini - itu menggunakan sebuah kolaborasi yang sudah
ada
beberapa kasus kolaborator harus melakukan apa-apa
Anda ingin abstrak penanganan nol dari klien
Mengingat bahwa referensi obyek mungkin opsional nol, dan
bahwa hasil cek nol adalah untuk melakukan apa-apa atau menggunakan beberapa
nilai default, bagaimana bisa tidak adanya obyek - kehadiran referensi null -
diperlakukan secara transparan?
Terkadang kelas yang membutuhkan kolaborator tidak perlu
kolaborator untuk melakukan sesuatu. Namun, kelas ingin mengobati kolaborator
yang tidak apa-apa dengan cara yang sama memperlakukan satu yang benar-benar
memberikan perilaku.
Pertimbangkan misalnya screen saver sederhana yang
menampilkan bola yang bergerak layar dan memiliki efek warna khusus. Hal ini
mudah dicapai dengan menciptakan kelas Bola untuk mewakili bola dan menggunakan
pola Strategi untuk mengontrol gerak bola dan pola Strategi lain untuk
mengontrol warna bola.
Kemudian akan sepele untuk menulis strategi untuk berbagai
jenis gerak dan efek warna dan menciptakan bola dengan kombinasi dari mereka.
Namun, untuk memulai dengan Anda ingin membuat strategi sederhana mungkin untuk
memastikan semuanya bekerja. Dan strategi ini juga dapat berguna kemudian
karena Anda inginkan sebagai strategi sebagai strategi mungkin.
Sekarang, strategi yang paling sederhana akan ada strategi.
Yang melakukan apa-apa, tidak bergerak dan tidak berubah warna. Namun, pola
Strategi membutuhkan bola untuk memiliki objek yang mengimplementasikan
interface strategi. Di sinilah pola Obyek Null menjadi berguna.
Cukup menerapkan NullMovementStrategy yang tidak bergerak
bola dan NullColorStrategy yang tidak berubah warna bola. Kedua hal ini mungkin
dapat dilaksanakan dengan dasarnya tidak ada kode. Semua metode di kelas-kelas
ini melakukan "apa-apa". Mereka adalah contoh sempurna dari Null
Object Pola.
Kunci untuk pola Obyek Null adalah kelas abstrak yang
mendefinisikan antarmuka untuk semua objek dari jenis ini. Objek Null
diimplementasikan sebagai subclass dari kelas abstrak ini. Karena itu sesuai
dengan antarmuka kelas abstrak ', dapat digunakan setiap tempat jenis objek
yang dibutuhkan. Dibandingkan dengan menggunakan khusus "null" nilai
yang tidak benar-benar mengimplementasikan antarmuka abstrak dan yang harus
selalu diperiksa untuk dengan kode khusus di setiap objek yang menggunakan
antarmuka abstrak.
Hal ini kadang-kadang berpikir bahwa Objects Null lebih
sederhana dan "bodoh" tetapi sebenarnya Obyek Null selalu tahu persis
apa yang perlu dilakukan tanpa berinteraksi dengan benda lain. Jadi sebenarnya
itu sangat "cerdas."
- Klien -
- membutuhkan kolaborator.
- AbstractObject -
- menyatakan antarmuka untuk kolaborator Klien
- mengimplementasikan perilaku default untuk antarmuka umum untuk semua kelas, yang sesuai
- RealObject -
- mendefinisikan subclass beton AbstractObject yang contoh memberikan perilaku yang berguna yang Klien mengharapkan
- NullObject -
- menyediakan sebuah antarmuka yang identik dengan AbstractObject sehingga benda nol dapat digantikan untuk benda nyata
- mengimplementasikan interface untuk melakukan apa-apa. Apa sebenarnya artinya melakukan apa-apa tergantung pada apa jenis perilaku Klien mengharapkan
- ketika ada lebih dari satu cara untuk melakukan apa-apa, lebih dari satu kelas NullObject mungkin diperlukan
Kelas Obyek Null sering diimplementasikan sebagai Singleton.
Karena objek null biasanya tidak memiliki setiap negara, negara yang tidak bisa
berubah, sehingga beberapa contoh identik. Daripada menggunakan beberapa contoh
identik, sistem hanya dapat menggunakan satu contoh berulang kali.
Jika beberapa klien mengharapkan objek null untuk melakukan
apa-apa salah satu cara dan beberapa yang lain, beberapa kelas NullObject akan
diperlukan. Jika melakukan perilaku tidak harus disesuaikan pada waktu
berjalan, kelas NullObject akan membutuhkan variabel pluggable sehingga klien
dapat menentukan bagaimana objek null harus melakukan apa-apa (lihat diskusi adapter
pluggable dalam pola Adapter). Ini umumnya mungkin merupakan gejala dari
AbstractObject tidak memiliki didefinisikan dengan baik (semantik) antarmuka.
Sebuah Obyek Null tidak mengubah menjadi Obyek nyata. Jika
objek dapat memutuskan untuk menghentikan penyediaan melakukan perilaku apa-apa
dan mulai menyediakan perilaku nyata, itu bukan obyek nol. Ini mungkin sebuah
benda nyata dengan melakukan apa-apa modus, seperti kontroler yang dapat
beralih masuk dan keluar dari modus read-only. Jika itu adalah satu objek yang
harus bermutasi dari melakukan apa-apa objek ke yang asli, itu harus
dilaksanakan dengan pola Negara atau mungkin pola Proxy. Dalam hal ini suatu
Negara Null dapat digunakan atau proxy mungkin mengadakan Obyek Null.
Penggunaan benda nol dapat mirip dengan proxy, tetapi dua
pola memiliki tujuan yang berbeda. Sebuah proxy menyediakan tingkat tipuan
ketika mengakses subjek nyata, sehingga mengendalikan akses ke subjek. Sebuah
kolaborator nol tidak menyembunyikan objek dan kontrol nyata akses ke sana, itu
menggantikan objek nyata. Sebuah proxy akhirnya dapat bermutasi mulai bertindak
seperti subjek nyata. Sebuah objek null tidak akan bermutasi untuk mulai
menyediakan perilaku nyata, itu akan selalu menyediakan melakukan perilaku
apa-apa.
Sebuah Obyek Null bisa menjadi kasus khusus dari pola
Strategi. Strategi menentukan beberapa kelas ConcreteStrategy sebagai
pendekatan yang berbeda untuk menyelesaikan tugas. Jika salah satu dari mereka
pendekatan adalah untuk secara konsisten melakukan apa-apa, yang
ConcreteStrategy adalah NullObject a. Sebagai contoh, Controller adalah View
Strategi untuk menangani input, dan NoController adalah Strategi yang
mengabaikan semua masukan.
Sebuah Obyek Null bisa menjadi kasus khusus dari pola Negara.
Biasanya, setiap ConcreteState memiliki beberapa metode melakukan apa-apa
karena mereka tidak sesuai untuk negara itu. Bahkan, metode yang diberikan
sering dilaksanakan untuk melakukan sesuatu yang berguna di kebanyakan negara
tetapi untuk melakukan apa-apa di setidaknya satu negara. Jika ConcreteState
tertentu mengimplementasikan sebagian besar metode untuk melakukan apa-apa atau
setidaknya memberikan hasil nol, itu menjadi melakukan apa-apa negara dan
dengan demikian adalah negara null.
Sebuah Obyek Null dapat digunakan untuk memungkinkan
pengunjung untuk aman mengunjungi hirarki dan menangani situasi nol.
Obyek Null adalah kelas kolaborator beton yang bertindak
sebagai kolaborator untuk klien yang membutuhkan satu. Perilaku nol tidak
dirancang untuk dicampur ke dalam sebuah objek yang membutuhkan beberapa
melakukan perilaku apa-apa. Hal ini dirancang untuk kelas yang delegasi untuk
kolaborator semua perilaku yang mungkin atau mungkin tidak melakukan perilaku
apa-apa.
Category
Komentar