网站首页 > 基础教程 正文
前端JavaScript设计模式-观察者模式:
观察者模式简单的概念是,让多个观察者对象同时监听同一个主题对象,当主题对象状态发生变化时,会通知所有的观察者对象,让他们自动触发更新
// 主题对象
class Subject{
constructor(){
this.state = 0
this.observers = []
}
getState(){
return this.state
}
setState(state){
this.state = state
this.notifyAllObservers()
}
notifyAllObservers(){
this.observers.forEach(observer => {
observer.update()
})
}
attach(observer){
this.observer.push(observer)
}
}
// 观察者对象
class Observer{
constructor(name,subject){
this.name = name
this.subject = subject
this.subject.attach(this)
}
update(){
console.log(`name=${this.name},state=${this.subject.getState()}`)
}
}
let sub = new Subject()
let obs1 = new Observer('obs1',sub)
let obs2 = new Observer('obs2',sub)
let obs3 = new Observer('obs3',sub)
// 改变主题对象中state状态时触发
sub.setState('2')
sub.setState('8')
sub.setState('5')
观察者模式在程序中用的比较多,例如jQuery的click点击事件原理就是通过观察者模式实现的
vue提供的数据双向绑定也是运用了观察者模式的思想,还有React等等
观察者模式主要实现了一对一、一对多监听
许多面试者经常在面试中被问到观察者模式和发布订阅相关知识
然后就以为观察者模式的主要思想来源于发布订阅
实际上观察者模式和发布订阅两者互不相关
观察者模式是观察者监听到被观察者发生变化时,观察者自身也同步发生变化
发布订阅是有个中间层来控制发布者和订阅者之间的操作,发布者通知给中间层,中间层接收并对订阅者发送通知,订阅者接收通知
猜你喜欢
- 2024-11-06 jQuery VS AngularJS 你更钟爱哪个?
- 2024-11-06 Jquery实现文本框得到焦点的时候,文本框的焦点出现在最后!
- 2024-11-06 bootstrap基础快速入门-14 分页pagination组件
- 2024-11-06 网站前端横幅滑动选项效果 网页出现横向滚动条
- 2024-11-06 区分初级和高级JavaScript程序员:是否理解JavaScript闭包(Closure)
- 2024-11-06 JavaScript学习笔记(三十三)—jQuery(下)
- 2024-11-06 jQuery UI 下载 jquery怎样下载才能使用
- 2024-11-06 Python工程师带你分析必会框架Django之关于Ajax(附步骤和例子)
- 2024-11-06 JavaScript基础知识系列:判断类型(上)
- 2024-11-06 jQuery Mobile 按钮 jquery 按钮不可用
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (68)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)