js设计模式(观察者模式与发布订阅模式区别)[四星推荐]

本文深入探讨了JavaScript中的观察者模式和发布订阅模式,通过实例解释了两者之间的区别。观察者模式通常用于单个应用内部,而发布订阅模式则适用于更大型的跨应用信息传递,如消息中间件。两者虽然不同,但都体现了发布订阅的思想。文中还提供了一段经典代码示例,展示了如何实现一个简单的发布订阅功能。
摘要由CSDN通过智能技术生成

前言:前些年做拖拽的时候调研了很多产品,后来选了X6,但是里面很多二次功能的实现,设计模式都是参考 imove,当时不知道一直用的 高度封装trigger ,

现在恍然大悟就是大名鼎鼎的发布订阅模式

1.观察者模式

观察者模式一般有观察者和被观察者

打个不恰当比喻,甲乙丙丁强哥 五人去抢银行,强哥望风,

强哥就是被观察者, 甲乙丙丁就是观察者,四个观察者要看强哥行事

2.发布订阅模式

这个就有意思了  这个模式比较大 不再是一个小犯罪团伙了

队伍1 甲乙丙丁(订阅)
队伍2 一二三四   (订阅)
三方服务:高德地图 (调度中心)
队伍1 队伍2 分别抢劫两个银行  都在高德地图订阅了 警察通知服务
出警 (发布者)
高德地图 (收到警车运行讯息)
队伍1 队伍2 (收到高德地图的通知)

3.总结

1.不同:角色数量不同
2..不同: 观察者模式有松耦合关系 发布订阅没有耦合

3.使用: 观察者单个应用内部  发布订阅场景更大 跨应用 信息中间件kafka

综上所述:她们不同 但是她们思想都有发布订阅的思想

4.经典代码示例(兄弟们啊  这个真的牛皮  学的融会贯通 设计组件 牛皮哄哄)

var Event = (function(){
    var list = {},
          listen,
          trigger,
          remove;
          listen = function(key,fn){
            if(!list[key]) {
                list[key] = [];
            }
            list[key].push(fn);
        };
        trigger = function(){
            var key = Array.prototype.shift.call(arguments),
                 fns = list[key];
            if(!fns || fns.length === 0) {
                return false;
            }
            for(var i = 0, fn; fn = fns[i++];) {
                fn.apply(this,arguments);
            }
        };
        remove = function(key,fn){
            var fns = list[key];
            if(!fns) {
                return false;
            }
            if(!fn) {
                fns && (fns.length = 0);
            }else {
                for(var i = fns.length - 1; i >= 0; i--){
                    var _fn = fns[i];
                    if(_fn === fn) {
                        fns.splice(i,1);
                    }
                }
            }
        };
        return {
            listen: listen,
            trigger: trigger,
            remove: remove
        }
})();
// 测试代码如下:
Event.listen("color",function(size) {
    console.log("尺码为:"+size); // 打印出尺码为42
});
Event.trigger("color",42);

饮水思源: 说完观察者和发布订阅模式的区别,面试官不留我吃饭了

饮水思源:详解 Javascript十大常用设计模式 - 掘金

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值