观察者模式
let publisher = {
list:[],
listen:function(user,type){
if(!this.list[type]){
this.list[type] = []
}
this.list[type].push(user)
},
notify(type){
this.list[type].forEach(user=>{
user.receive(type)
})
}
}
class normalUser{
constructor(){
this.role = 'nromal'
}
receive(type){
console.log(`receive ${type} news`)
}
}
class vipUser{
constructor(){
this.role = 'vip'
}
receive(type){
console.log(`receive ${type} news`)
}
}
publisher.listen(new normalUser(),'sport')
publisher.listen(new vipUser(),'sport')
publisher.notify('sport')
发布者订阅者模式
let subscriber = {
list:[],
listen:function(user,type){
if(!this.list[type]){
this.list[type] = []
}
this.list[type].push(user)
},
notify:function(type){
this.list[type].forEach(user=>{
user.receive(type)
})
}
}
let publisher = {
sub:subscriber,
listen:function(user,type){
this.sub.listen(user,type)
},
notify:function(type){
this.sub.notify(type);
}
}
class normalUser{
constructor(){
this.role = 'nromal'
}
receive(type){
console.log(`receive ${type} news`)
}
}
class vipUser{
constructor(){
this.role = 'vip'
}
receive(type){
console.log(`receive ${type} news`)
}
}
publisher.listen(new normalUser(),'sport')
publisher.listen(new vipUser(),'sport')
publisher.notify('sport')