definición
Publicar y suscribirse es un paradigma de mensaje. El remitente (editor) del mensaje no enviará el mensaje directamente al receptor específico (suscriptor), sino que enviará el mensaje publicado al intermediario de mensajes, y el intermediario de mensajes filtrará los mensajes. , El intermediario de mensajes generalmente realiza la función de almacenar y reenviar para enviar mensajes del editor al suscriptor
Caracteristicas
Acoplamiento flexible: los suscriptores pueden suscribirse a múltiples tipos de mensajes, los editores no necesitan preocuparse por cuántos suscriptores hay
Ejemplo
Realice una función similar a la cuenta oficial de WeChat para publicar artículos (publicación), dejar de seguir (cancelar suscripción) y seguir cuentas oficiales (suscripción).
La función a implementar.
- El usuario a siguió la cuenta pública "People's Daily".
- El usuario b siguió la cuenta pública "Hubei Daily".
- El usuario c siguió la cuenta pública "People's Daily".
- "People's Daily Public Account" publicado "¡La más alta cortesía! ¡En nombre del país, saludos!"
- Publicación de la cuenta pública "Hubei Daily" "¡El Ministerio de Educación es claro! ¡La exención del examen se reconocerá a partir de 2021!"
- El usuario se da de baja de la cuenta oficial de "People's Daily"
- El People's Daily publicó un artículo "¡Sea estrictamente preventivo! 2 casos recién confirmados, todos importados del extranjero"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
class Sub{
constructor(){
// 收集订阅信息,调度中心
this.list = {
}
}
// 订阅
on(name,userId,fn){
if(!(this.list[name] instanceof Array)){
this.list[name] = []
}
this.list[name].push({
userId,fn})
}
// 发布
emit(name,content){
this.list[name].forEach(item=>{
item.fn(content)
})
}
// 取消订阅
off(name,userId){
this.list[name].forEach((item,index)=>{
if(item.userId === userId){
this.list[name].splice(index,1)
}
})
}
}
let sub = new Sub();
//A关注人民日报公众号
sub.on('人民日报','A',function(content){
console.log('A接收到人民日报推送的消息',content)
})
//B关注湖北日报公众号
sub.on('湖北日报','B',function(content){
console.log('B接收到湖北日报推送的消息',content)
})
//C关注人民日报公众号
sub.on('人民日报','C',function(content){
console.log('C接收到人民日报推送的消息',content)
})
//
sub.emit('人民日报','最高礼遇!以国之名,致敬!')
sub.emit('湖北日报','教育部明确!2021年起免试认定!')
sub.off('人民日报','A')
sub.emit('人民日报',"严防不懈!新增确诊2例,均为境外输入")
</script>
</body>
</html>