js 观察者模式

本文分4个部分介绍
1.什么是观察者模式
2.观察者模式的应用场景
3.观察者模式的优缺点
4.观察者模式的简单实现

一.什么是观察者模式
观察者模式里有两个对象 观察者 和 发生的事件。
观察者对发生的事件有兴趣。

观察者模式 解决1对多的关系;
其中有一个比较难的思维点 就是 某人对某个事情敢兴趣,不是自己一直盯着那个事情,而是发生的事件对象 去通知对这个事情敢兴趣的人。

二.应用场景
多个业务关心一个数据的的变化时可以采用这个模式。

三.优缺点
优点:很好的组织了观察者逻辑,以后业务逻辑变化,增删 观察者就可以;
缺点:观察者太多,可能执行时间过长,需要对观察者做优先级处理

四.简单实现

// 观察者模式 简单实现

// 收集对发生的事情有兴趣的人
class Dep {
  constructor() {
//存储对事情敢兴趣的人
    this.watchers = [];
  }
//收集对事情敢兴趣的人
  addDep(watcher) {
    this.watchers.push(watcher);
  }

  // 事件发生时通知所有人
  notifys() {
    this.watchers.forEach((item) => {
      item.notify();
    });
  }
}

// 观察者 对发生的事情敢兴趣的人
class Watcher {
//name是观察者的标记名称 fun是事件发生时要干的事情
  constructor(name, fun) {
    this.name = name;
    this.doneFun = fun;
  }

  notify() {
    console.log('我是-' + this.name + '-观察者');
    if (typeof this.doneFun === 'function') {
      this.doneFun();
    }
  }
}

//这里是举例执行
//假设有个对象 a={name:''},有3个观察者 好奇1,2,3号对a对象是否改变了name有兴趣,代码就可以这样写
const a={name:'牛大爷'}
const Deps = new Dep();
Deps.addDep(new Watcher('好奇者1号'));
Deps.addDep(new Watcher('好奇者2号'));
Deps.addDep(new Watcher('好奇者3号'));
//牛大爷下面决定改名称了 
a.name='你大爷';
//这样好奇者 1,2,3号就都知道牛大爷改名字了
Deps.notifys();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容