zoukankan      html  css  js  c++  java
  • 观察者模式和订阅-发布模式的区别

     观察者模式:

    var subject = {
    	observers: [],
    	notify() {
    		this.observers.forEach(observer =>{
    			observer.update()
    		})
    	},
    	attach (observer) {
    		this.observers.push(observer)
    	}
    }
    var observer = {
    	update(){
    		alert('updated')
    	}
    }
    subject.attach(observer)
    subject.notify()

    观察者和倍观察这直接沟通, 耦合性强

    订阅发布模式:

    var publisher = {
    	publish(pubsub) {
    		pubsub.publish()
    	}
    }
    var pubsub = {
    	subscribes: [],
    	publish() {
    		this.subscribes.forEach(subscribe =>{
    			subscribe.update();
    		})
    	},
    	subscribe(sub) {
    		this.subscribes.push(sub)
    	}
    }
    var subscribe = {
    	update() {
    		console.log('update')
    	},
            subscribe(pubsub) {
                pubsub.subscribe(this);
            }
    }
    subscribe.subscribe(pubsub)
    publisher.publish(pubsub)
    

    订阅者,发布者,不直接沟通,中间通过事件中间者沟通。

    区别与适用场景

    总的来说,发布-订阅模式适合更复杂的场景。

    在「一对多」的场景下,发布者的某次更新只想通知它的部分订阅者

    在「多对一」或者「多对多」场景下。一个订阅者依赖于多个发布者,某个发布者更新后是否需要通知订阅者?还是等所有发布者都更新完毕再通知订阅者?

  • 相关阅读:
    vmware导出为ovf
    华三接入交换机推荐
    mysql root情况
    ospf精确宣告地址
    kubernetes k8s yum localinstall
    js判断邮箱、用户名、手机号码和电话号码是否输入正确?
    如何修改Oracle中表的字段长度?
    mybatis与hibernate区别
    SSM框架的优势?
    SSH框架的优势?
  • 原文地址:https://www.cnblogs.com/bigman-bugman/p/12274487.html
Copyright © 2011-2022 走看看