Kali terakhir saya mengkaji mod pemerhati, banyak artikel mengatakan bahawa ia juga dipanggil Langgan/Terbitkan (mod terbitkan/langgan). Tetapi dalam buku "Javascript Design Patterns", masih terdapat beberapa perbezaan antara kedua-dua corak ini. Perkataan asal dalam buku adalah seperti berikut:
1. Mod Pemerhati memerlukan pemerhati yang ingin menerima pemberitahuan topik mesti melanggan acara perubahan kandungan.
2.Mod Langgan/Terbitkan menggunakan saluran topik/acara, iaitu antara pelanggan dan penerbit. Sistem acara membenarkan kod untuk menentukan acara khusus aplikasi yang boleh diluluskan parameter tersuai yang mengandungi nilai yang diperlukan oleh pelanggan. Tujuannya adalah untuk mengelakkan pergantungan antara pelanggan dan penerbit.
Berbeza daripada corak Pemerhati kerana ia membenarkan mana-mana pelanggan melaksanakan pengendali acara yang sesuai untuk mendaftar dan menerima pemberitahuan daripada penerbit.
Baiklah, saya tidak tahu. Berikut adalah pemahaman saya:
1. Dalam corak pemerhati, objek sasaran bertanggungjawab untuk mengekalkan pemerhati. Dalam model terbitkan/langganan, penerbit tidak mengambil berat tentang pelanggan dan hanya bertanggungjawab untuk membuang mesej.
2. Dalam corak pemerhati, pemerhati mesti menyediakan antara muka, dan kemudian memanggil antara muka ini apabila objek sasaran berubah untuk memastikan keadaannya sendiri konsisten dengan keadaan sasaran. Iaitu, semua pemerhati mesti mempunyai antara muka bersatu (seperti kaedah kemas kini yang ditulis di atas, kaedah semua orang mesti dipanggil nama ini). Dalam model terbitkan/langganan, pencetus peristiwa pelanggan tidak bergantung pada antara muka sedemikian, tetapi dicetuskan oleh pelanggan dengan mendengar mesej tertentu (mesej ini biasanya mengandungi nama dan parameter yang diperlukan oleh pelanggan). Dapat difahami bahawa perkara yang dipantau oleh pelanggan bukanlah penerbit, tetapi kumpulan mesej Selagi terdapat mesej yang penting dalam kumpulan mesej, peristiwa akan dicetuskan, tanpa mengira siapa yang menerbitkan mesej itu. Penerbit dan pelanggan dipisahkan.
Berikut ialah pelaksanaan mod terbitkan/langgan dalam js Salin dan tampalkannya ke dalam konsol dan cuba: