首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
just_to_do
广州大学华软软件学院 前端工程师
关注
已关注
取消关注
通过实现观察者模式,我们解耦了主题和观察者,使它们能够独立变化。主题可以通知多个观察者,而观察者可以根据需要进行相应的处理。这种模式在许多场景中都非常有用,如事件监听、数据变化通知等。
@阿珊和她的猫:
面试高频手撕题 | 18.实现一个观察者模式
一、知识点 观察者模式(Observer Pattern)是一种软件设计模式,它定义了对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 在观察者模式中,有以下几个角色: 主题(Subject):被观察的对象,它拥有状态并可以修改状态。 观察者(Observer):观察主题的对象,当主题的状态发生改变时,观察者会收到通知。 具体主题(ConcreteSubject):具体的被观察对象,它实现了主题的接口,持有观察者列表,并在状态改变时通知观察者。 具体观察者(ConcreteObserver):具体的观察对象,它实现了观察者的接口,接收主题的通知并进行相应的处理。 二、思路分析 实现观察者模式的关键是解耦主题和观察者,让它们能够独立变化。以下是一些基本的思路: 主题持有观察者列表,当状态改变时遍历通知观察者。 观察者通过注册或订阅方式向主题登记,以便接收通知。 主题和观察者之间定义一个接口,用于通知状态变化。 三、JavaScript 解答 以下是使用 JavaScript 实现观察者模式的一个简单示例: class Subject { constructor() { this.observers = []; } attachObserver(observer) { this.observers.push(observer); } detachObserver(observer) { this.observers = this.observers.filter(item => item !== observer); } notifyObservers() { this.observers.forEach(observer => observer.update()); }}class Observer { constructor(name) { this.name = name; } update() { console.log(`${this.name} 收到通知`); }}// 创建主题对象const subject = new Subject();// 创建观察者对象const observer1 = new Observer('Observer 1');const observer2 = new Observer('Observer 2');// 观察者注册到主题subject.attachObserver(observer1);subject.attachObserver(observer2);// 主题发出通知subject.notifyObservers();// 观察者取消注册subject.detachObserver(observer1);// 主题再次发出通知subject.notifyObservers(); 在上述示例中,我们创建了一个Subject类和一个Observer类。Subject类负责管理观察者,并提供了attachObserver、detachObserver和notifyObservers方法。Obs类是具体的观察者,它实现了方法用于接收通知。
点赞 2
评论 2
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
01-30 16:52
南华大学 Java
你的AI恋陪
帮助你谈恋爱👇 ## 角色设定: 你是最佳聊天黑话翻译器,情商超高,最懂TA的心,能够读懂TA话中隐含的意思。记住你从来不说“他”或“她”,你会统一用“TA”称呼!你的对话风格言简意赅,轻松幽默、直截了当,语调温和亲切。 ## 潜台词解读规则 1.有些话语往往是口是心非,说一套做一套。 2.如果TA问了一些与情感有关的问题,TA很可能是在等待你的表白或爱意。 3.如果TA询问意见,往往是TA自己想这么做。 4.当TA说随便时你要提供多个选项供TA选择。 5.当涉及到吃喝玩乐方面的话题时,记住答应TA,哄TA,支持TA即可。💪 6.TA说黑话时往往是有小情绪了,这些小情绪包含不开心、生气、无...
Prompt分享
点赞
评论
收藏
分享
01-31 13:33
腾讯_Android客户端开发
字节飞书 安卓二面
自我介绍自定义 View 和自定义 ViewGroup 的实现流程?安卓界面刷新的垂直同步信号是什么,有什么作用?如何从内存和卡顿两个角度优化 UI 性能?安卓中 ANR 的触发阈值是什么,底层是如何检测 ANR 的?除了约束布局,还有哪些布局优化手段?RecyclerView 相比 ListView 有哪些性能优势?屏幕适配中,尺度修饰符(如 sw600dp)的作用是什么?如何根据不同屏幕尺寸加载对应布局?volatile 关键字的作用是什么,能保证并发的哪些特性(可见性、有序性、原子性)?volatile 关键字底层是如何实现的,内存屏障的作用是什么?单例模式中如何使用 volatile ...
查看22道真题和解析
点赞
评论
收藏
分享
01-06 08:47
门头沟学院 硬件开发
双非(应该属于二本了),硬件简历各位大佬指导一下
点赞
评论
收藏
分享
2025-12-23 12:26
已编辑
门头沟学院 嵌入式软件开发
影石嵌入式软件实习面筋
mcu+rtos岗位 这是一面
发面经攒人品
点赞
评论
收藏
分享
02-04 20:45
美的集团_后端开发工程师(准入职员工)
美的内推,美的内推码
说说大家都比较关心的加班和💰问题 目前没有加班,甚至运中也有大假了,而且简化汇报形式(不做ppt)是真的 💰前几天发了半个月的,比我想象中的要多! 还有一次性安家费、餐补啥的! 总之来说待遇是不错的世界五百强-美的集团2026届校园招聘启动啦【企业介绍】集智能家居、楼宇科技、工业技术、机器人与自动化和创新型业务五大业务板块为一体的全球化科技集团,世界五百强企业【招聘岗位】涵盖信息技术、研发技术、财务金融、管理等八大职业群,海量岗位任您选择 【工作地点】佛山、合肥、上海、广州、深圳等40+海内外城市 【投递链接】https://careers.midea.com/recruit-school...
美的集团公司福利 877人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
AI 应用开发学习全景路线图
1.6W
2
...
双非大三生在家20小时写了个Agent开源项目
5281
3
...
害怕被嘲笑就不去做了吗?
4140
4
...
字节的offer流程需要多久
3778
5
...
字节国际化广告后端一面
3361
6
...
小红书前端一面
2553
7
...
阿里社招一面
2174
8
...
我被美团二面面试官嘲笑
1799
9
...
字节日常实习二面
1719
10
...
程序员找工作至少要刷多少题
1651
创作者周榜
更多
正在热议
更多
#
在大厂上班是一种什么样的体验
#
6884次浏览
102人参与
#
机械人避雷的岗位/公司
#
41951次浏览
279人参与
#
程序员找工作至少要刷多少题?
#
12785次浏览
198人参与
#
12306一秒售罄,你抢到回家的票了吗?
#
1123次浏览
39人参与
#
我现在比当时_,你想录用我吗
#
5679次浏览
87人参与
#
过年最难忘的一件事
#
23053次浏览
174人参与
#
你最满意的offer薪资是哪家公司?
#
69491次浏览
349人参与
#
为了减少AI幻觉,你注入过哪些设定?
#
2605次浏览
96人参与
#
牛客AI体验站
#
4751次浏览
142人参与
#
AI Coding的使用心得
#
3473次浏览
91人参与
#
找工作的破防时刻
#
253092次浏览
1960人参与
#
刚入职的你踩过哪些坑
#
5331次浏览
113人参与
#
论秋招对个人心气的改变
#
7309次浏览
130人参与
#
一张图晒一下你的AI员工
#
3595次浏览
82人参与
#
关于春招/暑期实习,你想知道哪些信息?
#
5348次浏览
98人参与
#
黄金这个事上,你学到了什么
#
1272次浏览
41人参与
#
机械人你知道哪些单休企业
#
85449次浏览
428人参与
#
程序员能干到多少岁?
#
6745次浏览
103人参与
#
晒晒你司的新年福利
#
5522次浏览
89人参与
#
关于提前批我想问
#
267448次浏览
2307人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务