vue中的观察者模式

简介: vue中的观察者模式

1.什么是观察者模式


1.1   23种设计模式之一。最常见的模式。

1.2   是套路,解决一类问题的最优解

1.3   定义了一种一对多的依赖关系。让多个观察者对象同时监听某一个目标对象,当这个目标对象的状态发生变化时,会通知所有的观察者

1.4 详细点:

观察者:他是一个函数(做事)

事件:一个标志符

当这个事件发生时,观察者会产生相应的动作。一个事件有多个观察者,当这个事件发生时,多个观察都会执行

1.5 总结:

观察者就是一群舔狗,监听女神的一切举动,如看见女神渴了,观察者们就争相给他买水喝

2.抛出问题:有多个函数如何保证依次执行?


有多个函数(观察者),如何依次执行
function f1 () {
    console.log('f1')
}
function f2 () {
    console.log('f2')
}
function f3 () {
    console.log('f3')
}
var arr = [f1,f2,f3]  //将他们放到一个数组中,通过数组去依次调用
arr.foreach(item => {
    item()  //每个item相当于数组中的f1、f2然后加()调用函数。  
})
同理:
arr.push(function f4 (){console.log('f4')}) //往数组里面加函数

2-1 总结:

将他们放入数组中通过数组去依次调用

2-2 需求复杂点:当某个特定的事件发生,执行多个函数?

// 定义观察者
function xiaowang (){
    console.log('大哥起身,小王给大哥 拉凳子')
}
function xiaoC (){
    console.log('大哥起身,小C给大哥 拉凳子')
}
function xiaoA (){
    console.log('大哥去世,小A给大哥 抬棺')
}
function xiaoB (){
    console.log('大哥抽烟,小B给大哥 点火')
}
//定义管家  观察者与动作(事件)之间的关系   这个最重要!!!
const guanjia = {
    'qishen':[xiaowang,xiaoC],
    'qushi':[xiaoA],
    'chouyan':[xiaoB]
]
//大哥起身
guanjia['qishen'].foreach(item=>item()) 这段代码是遍历起身这个动作,然后循环调用观察者函数。
//发布事件,通过相应的观察者去执行
封装:function emit (eventname){
    guanjia[eventname].foreach(item=>item())
}
     emit('qishen')
//添加观察者封装
function on (eventname,callback){
    guanjia[eventname].push(callback)
}
on('qishen',function(){console.log('XXXXXX')})

2-3 面向对象的写法:

function Eventcenter(){   //构造函数 类比Vue
    this.guanjia = {
        'qishen':[],
        'baishou':[]
    }
}
//添加观察者(收小弟,有分工,只响应某个事件)
Eventcenter.prototype.$on = function(eventname,listener){
if(this.guanjia[eventname]){ //先判断有没没有这个事件名,没有去注册,有就添加观察者
    this.guanjia[eventname].push(listener)
    }else(this.guanjia[eventname]=[listener])
}
//发布事件,通知相关的观察者去执行
Eventcenter.prototype.$emit = function(eventname){ //在原型上添加方法
    if(this.guanjia[eventname]){
    this.guanjia[eventname].foreach(item=>item())
    }
}
function xiaowang (){comsole.log('XXXXX')}
var app = new Eventcenter()  //实例化 类比 VM
app.$on('qishen',xiaowang)   //添加小弟
app.$emit('qishen')发布事件通知相关的观察者去执行

2-4 总结:

2-4-1 观察者模式。是设计模式(解决一类问题的最优化解)的一种

2-4-2 发布订阅模式,不是特别严格的情况下,可以认为是指一个东西

2-4-3 观察者简单,发布订阅复杂点,有管家

2-4-4 接触过的观察者模式:

如事件监听addeventlistener

image.png


相关文章
|
14天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
1天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
1天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
6天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发
|
6天前
|
存储 JavaScript
Vue 状态管理工具vuex
Vue 状态管理工具vuex
|
14天前
|
缓存 JavaScript 搜索推荐
Vue SSR(服务端渲染)预渲染的工作原理
【10月更文挑战第23天】Vue SSR 预渲染通过一系列复杂的步骤和机制,实现了在服务器端生成静态 HTML 页面的目标。它为提升 Vue 应用的性能、SEO 效果以及用户体验提供了有力的支持。随着技术的不断发展,Vue SSR 预渲染技术也将不断完善和创新,以适应不断变化的互联网环境和用户需求。
31 9
|
13天前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。
|
12天前
|
JavaScript
如何在 Vue 中使用具名插槽
【10月更文挑战第25天】通过使用具名插槽,你可以更好地组织和定制组件的模板结构,使组件更具灵活性和可复用性。同时,具名插槽也有助于提高代码的可读性和可维护性。
15 2
|
12天前
|
JavaScript
Vue 中的插槽
【10月更文挑战第25天】插槽的使用可以大大提高组件的复用性和灵活性,使你能够根据具体需求在组件中插入不同的内容,同时保持组件的结构和样式的一致性。
14 2
|
12天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。