JavaScript之观察者模式

简介: JavaScript之观察者模式

观察者模式,其实指的就是,一对多的解释。一个对象发生改变,对应的多个订阅者都需要发生对应改变,这种多个对象观察一个对象的区别就是观察者模式。


举例子说明:


一个办公楼。不知道有多少个公司,但是他们都有一个物业群,这个群物业会通知一些疫情相关情况。物业会在群里通知办公楼的封锁情况,而各个公司的负责人则需要在群里随时观察是不是有情况,从而做出改变。同时这个群的所有者(物业)也会用有拉人入群,发送公告,清人出群的权限。


首先,你必须有一个对象为观察者。也就是说,例子中办公楼的这些公司。属于观察者。在观察某种情况,当这种情况出现后,可以改变自己的一些状态或者操作。


其次,有一个对象为主体,我们也可以叫他为通知者,也就是说,这个主体需要在被观察者的状态改变后,用来通知观察者们。这个可以是例子中的物业群。


最后,需要有一个对象为被观察者,也就是说,在某种特定状态改变后(被主体对象检测到),例如:例子中 物业群公告。


所以,我们可以以例子1为例,写一个代码实现自己的观察者模式。

// 物业群
class PropertyGroup {
    constructor() {
        // 初始化公告
        this.state = '正常运作'
        // 初始化公司列表
        this.companyList = []
    }
    // 添加公司(添加观察者)
    add (com) {
        this.companyList.push(com)
    }
    // 移除群聊
    remove (com){
        this.companyList.forEach((item,index) => {
            if(item == com){
                this.companyList.splice(index,1)
                return            
            }                    
        })    
    }
    // 设置状态
    setState(val) {
        this.state = val
        this.notify()
    }
    // 发送通知
    notify(){
        this.companyList.forEach((item) =>{
            if(this.state == '关闭办公楼'){
               item.Close()            
            }
        })    
    }
}
// 个人公司
class Company {
    constructor(name){
            this.name = name
    }
    Close(){
        console.log(this.name + '公司,关闭')    
    }
}
// 测试
const com1 = new Company("科技公司")
const com2 = new Company("生物公司")
const com3 = new Company("传媒公司")
// 物业拉群
const pro = new PropertyGroup()
pro.add(com1)
pro.add(com2)
pro.add(com3)
// 物业设置状态
pro.setState("关闭办公楼")

4e9a2fb6f41c44b38494f500143577b4.png

控制台上打印如上。

至此我们的观察订阅者demo就实现完成了。

物业群拥有拉入公司,移除公司,发送公告等操作。

而观察者(公司)仅仅是在物业群有公告发出的时候,根据公告自身,自己做出响应。

而这就是我们的观察者模式。

目录
相关文章
|
设计模式 缓存 JavaScript
JavaScript 简单实现观察者模式和发布-订阅模式
JavaScript 简单实现观察者模式和发布-订阅模式
62 0
|
7月前
|
设计模式 JavaScript 前端开发
js设计模式-观察者模式与发布/订阅模式
观察者模式和发布/订阅模式是JavaScript中的两种设计模式,用于处理对象间的通信和事件处理。观察者模式中,一个主题对象状态改变会通知所有观察者。实现包括定义主题和观察者对象,以及在主题中添加、删除和通知观察者的功能。发布/订阅模式则引入事件管理器,允许发布者发布事件,订阅者通过订阅接收通知。
|
7月前
|
设计模式 存储 消息中间件
JavaScript观察者模式:实现对象间的事件通信!
JavaScript观察者模式:实现对象间的事件通信!
|
设计模式 前端开发 JavaScript
JavaScript设计模式——观察者模式
观察者模式(也称发布订阅模式)是JavaScript中非常常见的设计模式,可以实现页面中的消息机制的监听,也是Vue、React主流框架实现的数据响应手段,解决了主体对象之间的解耦,今天来实现一下。
106 1
JavaScript设计模式——观察者模式
|
设计模式 缓存 JavaScript
|
设计模式 JavaScript 调度
JS案例:Observer Pattern(观察者模式)和Publisher-Subscriber Pattern(发布者/订阅者模式)
JS案例:Observer Pattern(观察者模式)和Publisher-Subscriber Pattern(发布者/订阅者模式)
135 0
JS案例:Observer Pattern(观察者模式)和Publisher-Subscriber Pattern(发布者/订阅者模式)
|
设计模式 JavaScript 前端开发
JavaScript设计模式-观察者模式(8)
JavaScript设计模式-观察者模式(8)
|
JavaScript 前端开发
以【猫叫、老鼠跑、主人醒】为例子,使用 javascript 来实现 观察者模式 (有在线演示)
  “猫叫、老鼠跑、主人醒”是一个很古老的话题了,大家也都有各自的想法和解决方案。我也是看了很多,一开始的时候是相当的迷糊,这个怎么就是面试题了?考的是啥呀,和编程有关系吗?又是猫又是老鼠的,晕死了。
1550 0
|
JavaScript
js设计模式之观察者模式(发布-订阅模式)
前言 现实中的发布-订阅模式 小明最近看上了一套房子,到了售楼处之后才被告知,该楼盘的房子早已售罄。好在售楼MM告诉小明,不久后还有一些尾盘推出,开发商正在办理相关手续,手续办好后就可以购买。
2059 0
|
前端开发 JavaScript
JavaScript 观察者模式
观察者模式又叫做发布-订阅模式。这是一种一对多的对象依赖关系,当被依赖的对象的状态发生改变时,所有依赖于它的对象都将得到通知。 生活中的观察者模式 就如我们在专卖店预定商品(如:苹果手机),我们会向专卖店提交预定申请,然后店家受申请,正常这样就完事了。
1129 0