当前位置: 首页 > news >正文

专门做实习计算机项目的网站平台南江红鱼洞水库建设管理局网站

专门做实习计算机项目的网站平台,南江红鱼洞水库建设管理局网站,做影视网站算侵权吗,广州短视频代运营公司2、观察者模式 2.1、观察者模式 2.1.1、前言 定义一种一对多的依赖关系,当一个对象发生变化时,所有依赖于它的对象都会自动收到通知并更新。 两个角色: Subject(主题/被观察者) Observer(观察者&…

2、观察者模式

2.1、观察者模式

2.1.1、前言

定义一种一对多的依赖关系,当一个对象发生变化时,所有依赖于它的对象都会自动收到通知并更新。

两个角色:

  1. Subject(主题/被观察者)
  1. Observer(观察者)

观察者模式一般至少有一个 Subject(主题) ,可以有多个Observer(观察者)。

二者关系: Subject(主题)主动建立与观察者的关系。

Subject(主题/被观察者):至少要有三个方法——添加观察者、移除观察者、通知观察者。

2.1.2、代码
		<input type="text" id="app" oninput="handleInput(event)">
<script>// 主题,接收状态变化,并通知每个观察者class Subject {constructor() {this.observers = []}// 新增观察者addObserver(observer) {this.observers.push(observer)}// 通知每个观察者notify(state) {this.observers.forEach(observer => {observer.update(state)})}removeObserver(observer) {const index = this.observers.indexOf(observer);if (index !== -1) {this.observers.splice(index, 1);}}}// 观察者,等待被通知class Observe {constructor(name) {this.name = name}update(state) {console.log(`${this.name} 获取到最新值:${state}`);}}const handleInput = (e) => {const event = e || eventconst value = event.target.value// 实例化一个主题const sub = new Subject()// 实例化两个观察者 一个沐歌,一个沐夏const muge = new Observe('沐歌')const muxi = new Observe('沐夏')// 添加观察者实例sub.addObserver(muge)sub.addObserver(muxia)// 状态改变,通知所有观察者sub.notify(value)}</script>

2.2、发布订阅模式

2.2.1、前言

发布订阅模式在观察者模式的基础上加入了 事件调度中心 ,提供更灵活的控制,适用于复杂的消息交互场景。

观察者模式是经典的设计模式,观察者和目标之间直接交互,适合简单的一对多通知。

2.2.1、代码
/** @Author: muge* @Date: 2021-05-21 18:46:09* @LastEditors: Please set LastEditors* @LastEditTime: 2023-03-09 16:37:47*/
//仿vue-$on $emit
class Event {// 首先定义一个事件对象,用来装事件数组(多个订阅者)handlers = {};// 订阅(事件添加方法) type=事件名 callback=回调函数$on(type, callback) {if (!this.handlers[type]) {// 没有则初始化this.handlers[type] = [];}// 存入该事件this.handlers[type].push(callback);}// 触发事件 type=事件名 params=参数$emit(type, params) {// 若没有注册该事件则抛出错误if (!this.handlers[type]) return new Error("未注册该事件");// 事件触发this.handlers[type].forEach((callback) => callback(params));}// 取消订阅 type=事件名 callback=回调函数$unsubscribe(type, callback) {// 无效事件抛出异常if (!this.handlers[type]) return new Error("未注册该事件");// 执行回调callback&&callback()// 删除事件delete this.handlers[type];}
}
// 创建一个event实例
const sub = new Event();
// 订阅事件changeInputValue onLaod
sub.$on("changeInputValue", (params) => {console.log("params", params);
});
sub.$on("onLaod", (params) => {console.log("params", params);});
console.log('当前的事件列表',sub.handlers);
// 事件触发
sub.$emit("changeInputValue", "最新的值是:1");
sub.$unsubscribe('changeInputValue',()=>{console.log('取消订阅,执行的回调');
})
console.log('changeInputValue-事件取消',sub.handlers);

DOM事件也是发布订阅模式。订阅window的onload事件,当window加载完毕时会向订阅者发布消息,执行相应的回调函数。

window.addEventListener('onload', function () {console.log('loaded!')
})
http://www.hyszgw.com/news/72589.html

相关文章:

  • 网站优化seo四个建议怎样做无水印视频网站
  • 给个网站能用的2022yy直播官网
  • 云建站模板百度一下你就知道官网网页
  • asp网站变慢网站怎么自己建设
  • 自助建站系统搭建网站肃宁网站建设
  • 如何制作网站视频网站建设项目预算
  • 有专门学做衣服网站班级响应式网站html格式
  • 手机建个人网站seo诊断表
  • 一流的中小型网站建设买网站名称
  • 网站建设要会英语吗淄博哪个网站做房屋出赁好
  • 做网站用什么系统较好做电缆好的网站
  • 创科手机网站扁平化蓝色网站模板
  • 做网站用笔记本电脑vue做网站
  • 网站建设与维护选择题怎么用ppt做网站设计
  • 哪个网站做高仿衣服discuz模板制作教程
  • seo大神做的网站扁平 网站模板
  • 楚州网站开发网站建设哪里
  • 镇江网站搜索优化哈尔滨网站制作费用
  • 第二章 营销型网站建设测验上海网页设计公司哪家最好
  • 专题网站开发工具有哪些什么是软文营销
  • 新密做网站优化建设网站cms
  • 网站页脚浙江省建筑培训网
  • 庆阳网站设计厂家新闻热点最新事件
  • 网站建设生意怎么样电子商城网站制作数据库
  • 网站建设商品的分类发布php做的网站
  • 织梦网站更改网站的导航龙江行程二维码下载
  • 做网站搭建环境隐形眼镜网站开发的经济效益
  • 网站备案背景布网页设计公司企业文化怎么写
  • 手机版 pc 版本 网站 跳转 seo轻极免费版wordpress主题
  • 深圳定制网站制作费用网上自助注册公司