-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path发布订阅
148 lines (90 loc) · 3.02 KB
/
发布订阅
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
观察者 发布订阅 自定义事件
订阅者subscriber/观察者observe
发布者publish/主题subject---被观察的对象
重要事件发生,发布者会通知(调用)所有订阅者&以事件对象的形式传递消息
eg1:杂志订阅
paper(发布者)----joe(订阅者)
eg2:
//主题subject/publish发布,保存状态,状态改变后触发观察者对象
class observer{subscriber订阅---等人触发
先订阅上,等待被触发
先定报纸,等待被送到
先点餐,等待被上菜
}
class subject{//发布---当主题状态变化,需要触发观察者了,触发列表中的update
constructor(){
this.state=0
this.observers=[]
}
getstate(){
return this.state
}
setstate(new_state){
this.state=new_state
}
notifyallobservers(){
this.observers.foreach(o bserver)=>{
observer.update()
}
attach(observer){
this.observer.push(observer)
}
}
场景:网页事件绑定
promise
jquery callbacks
nodejs自定义事件---几种 继承,stream,处理http请求多进程通讯
vue和react组件生命周期触发 vue和react组件是构造函数;生成组件《》构造函数初始化一个实例;生命周期钩子在组件实例不同状态下触发
vue watch
function loadimg(src){
var promise=new promise(function(){
var img=document.createelement('img')
img.onload=function(){
resolve(img)//图片onload(图片加载完后),会执行resolve,oromise状态变成功
}
img.onerror=function(){
reject('')promise状态变化
}
img.src=src
})return promsie
}
var src=''
var result=loadimg(src)
result.then(fucntion(img){
//先订阅上,因为加载图片是要时间的,不是立马执行
//需要等pomise状态变化时才执行
}).then(function(img){})
var callbacks=$.callbacks()
callbacks.add(function(info){
})
callbacks.fire('')
//先把一点点接收得函数处理好,结束得函数处理好
//再一点点处理流
//如果文件比较大,而内存比较小,一下子读完,电脑内存就撑爆了
//用流读,读一点,吐出一点
//stream用到自定义事件
var fs=require('fs')
var read_stream=fs.createreadstream()//读取文件的stream
var length=0
read_stream.on('data',function(chunk){
length+=chunk.tostring().length//
})
read_stream.on('end',function(){
console.log(length)
})
var readline=require('readline')
var fs=require('fs')
var rl=readline.createinteraface({
input:fs.readlinereadstream('')
})
var line_num=0
rl.on('line',function(line){
line_num++
})
rl.on('close',function(){
consoole.log(line_num)
})
设计原则验证:
subject和observer分离:不是主动触发而是被动监听,两者解耦
符合开放封闭原则
}