js implementa el modo de publicación y suscripción

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>

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_35958891/article/details/108436485
Recomendado
Clasificación