javaScript設計模式:發布訂閱模式


發布訂閱模式的思想是在觀察者模式的基礎上演變而來,在觀察者模式中客戶端監聽到對象某個行為就觸發對應任務程序。而在發布訂閱模式中依然基於這個核心思想,所以有時候也會將兩者認為是同一種設計模式。它們的不同之處在於觀察者模式中的客戶端與服務端是相互耦合的,即服務端對象直接綁定客戶端的監聽任務,客戶端直接綁定監聽服務端的行為。而在發布訂閱模式中,客戶端與服務端是解耦的,它們彼此不相互綁定,兩者的聯系由中間的通道模塊綁定實現連接。發布訂閱模式相對於觀察者模式實現了解耦,相互之間互不干擾。

 1 //發布者
 2 let publisher = {
 3     data:0,
 4     publishTopic:function(event){
 5         let arg = arguments.length > 1 ? Array.prototype.slice.call(arguments,1) : [undefined];
 6         channel.pub(event,...arg);
 7     }
 8 };
 9 //通道
10 let channel = {
11     events:{},
12     pub:function(event,arg){
13         //實現發布
14         if(!this.events[event]){
15             return;
16         }
17         this.events[event].forEach(ele => {
18             ele(arg);
19         });
20     },
21     sub:function(event,callback){
22         //實現訂閱
23         if(!this.events[event]){
24             this.events[event] = [];
25         }
26         this.events[event].push(callback);
27     }
28 };
29 //訂閱者
30 let subscribe = {
31     subscribeTopics:function(event,callback){
32         channel.sub(event,callback);
33     }
34 };
35 
36 //訂閱
37 subscribe.subscribeTopics("月刊",data =>{
38     console.log(data);
39 });
40 //發布
41 publisher.publishTopic("月刊","aaa");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM