美文网首页
设计模式(七)-观察者模式

设计模式(七)-观察者模式

作者: 仔崽06 | 来源:发表于2021-02-01 10:37 被阅读0次
观察者模式

观察者模式是一种对象行为模式,它定义对象间的一种一对多的依赖关系,当被观察者状态发生改变时,所有的观察者都得到通知并自动更新.

  • 图例


    image.png
  • 代码实现

class Baby{
    constructor(){
        this.observes=[];
        this.status='';
    }
    attach(...watcher){
        this.observes.push(...watcher)
    }
    chageStatus(){
        this.status='宝宝哭啦'
        if(this.observes.length){
            this.observes.forEach(fn=>{fn.update(this.status)})
        }
    }
}

class Father{
    update(status){
        return console.log(`爸爸知道${status}`)
    }
}
class Mather{
    update(status){
        return console.log(`妈妈知道${status}`)
    }
}
let baby=new Baby();
baby.attach(new Father,new Mather);
baby.chageStatus() //爸爸知道宝宝哭啦 妈妈知道宝宝哭啦
  • 应用场景

1.普通事件绑定

<button id="btn">按钮</button>

let btn=document.querySelector("#btn");

btn.addEventListener('click',function(event){
    console.log(event)
})
  1. promise
let promise=new Promise((resolve,reject)=>{
    setTimeout(()=>{
        resolve(11111)
    },1000)
})

promise.then(res=>{
   console.log(res)
}).catch(err=>{
   console.log(err)
})

3.jquery Callbacks

let $={
    Callbacks(){
        let callbacks=[]
        function add(fn){
            callbacks.push(fn)
        }
        function remove(fn){
            callbacks=callbacks.filter(item=>item!=fn)
        }
        function fire(){
            callbacks.forEach(item=>item())
        }
        return{
            add,
            remove,
            fire
        }
    }
}
let callbacks=$.Callbacks();
function a1(){
    console.log('a1')
}
function a2(){
    console.log('a2')
}
function a3(){
    console.log('a3')
}
callbacks.add(a1)
callbacks.add(a2)
callbacks.add(a3)
callbacks.remove(a2)
callbacks.fire()  //a1 a3
  1. node events
let EvenetEmitter=require('events');
let eve=new EvenetEmitter();
eve.on('click',function(name){
    console.log(name) //zdb
})

eve.emit('click','zdb')
  1. fs createReadStrema
let fs=require('fs');
let path=require('path');
let rs=fs.createReadStream(path.join(__dirname,'1.txt'))
rs.on('data',function(data){
    console.log(data)
})
rs.on('end',function(){
    console.log('end')
})

6.vue watch

   watch: {
        $route(to, from) {
           console.log(to,from)
        }
    }

7.vuex 官网示例

优点 缺点
观察者模式解除了主题和具体观察者的耦合,让耦合的双方都依赖于抽象,而不依赖于具体. 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。 3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。

相关文章

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • OkHttp设计模式剖析(六)外观模式

    上一篇 OkHttp设计模式剖析(五)观察者模式 下一篇 OkHttp设计模式剖析(七)迭代器模式 OKHTT...

  • 观察者模式js实现

    参看书籍JavaScript模式第七章设计模式我的理解:观察者模式又叫订阅/发布模式。被观察者(发布者)内部需要有...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • Java常见设计模式学习(非原创)

    文章大纲 一、策略模式二、观察者模式三、工厂模式四、单例模式五、其他模式六、设计模式总结七、参考文章 一、策略模式...

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • Guava源码分析——EventBus

    EventBus的设计理念是基于观察者模式的,可以参考设计模式(1)—观察者模式先来了解该设计模式。 1、程序示例...

网友评论

      本文标题:设计模式(七)-观察者模式

      本文链接:https://www.haomeiwen.com/subject/yflxtltx.html