Contoh mudah corak terbitkan/langganan dalam petua JavaScript_javascript

WBOY
Lepaskan: 2016-05-16 16:32:08
asal
1197 orang telah melayarinya

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:

Salin kod Kod adalah seperti berikut:

var pubsub = (function(){
var q = {}
topik = {},
         subUid = -1;
//Terbitkan berita
​ q.publish = function(topik, args) {
Jika(!topik[topik]) {kembali;}
      var subs = topik[topik],
            len = subs.length;
​​semasa(len--) {
              subs[len].func(topik, args);
}
         kembalikan ini;
};
//Langgan acara
​ q.langgan = fungsi(topik, func) {
topik[topik] = topik[topik] ?       var token = ( subUid).toString();
topik[topik].tolak({
token : token,
              func : func
});
         token pulangan;
};
Kembalikan q;
//Tiada lagi penulisan jika anda membatalkan langganan, merentasi topik, kemudian kembalikan token dengan menyimpannya dan padamkan elemen yang ditentukan
})();
//Acara yang dicetuskan
var logmsg = fungsi(topik, data) {
console.log("logging:" topik ":" data);
}
//Dengar mesej yang ditentukan 'msgName'
var sub = pubsub.subscribe('msgName', logmsg);
//Terbitkan mesej 'msgName'
pubsub.publish('msgName', 'hello world');
//Terbitkan mesej tidak dipantau 'msgName1'
pubsub.publish('anotherMsgName', 'saya juga!');

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!