Obyek Null Desain Pola

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.





Komentar