当前位置:网站首页>观察者模式怎么实现
观察者模式怎么实现
2022-06-29 08:17:00 【amateur12】
观察者模式:当一个对象状态发送改变时,会自动通知依赖它的对象。观察者模式属于行为型模式。
实现:实例化主题对象,然后观察者向主题对象注册,将注册进行遍历,让主题对象实现其接口提供的操作,即通知观察者做一些事情。
主题接口,主题,观察者接口,观察者
一个被观察者可以有多个观察者,主题就是被观察者
主题提供注册和通知的接口,观察者提供自身操作的接口。(这些观察者拥有一个同一个接口。)观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。耦合度相当之低。
观察者模式的优点:
主题和观察者是松耦合关系。主题只知道它的观察者是实现观察者某个类的实例,但并不知道是哪个类的实例,在观察者中,只知道它依赖的主题是实现主题某个类的实例,但不需要知道是哪个类的实例。
观察者模式满足开闭原则,对扩展开发,对修改关闭。当应用的需求改变时,不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。
观察者模式的缺点:
如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间
如果在被观察者之间有循环依赖的话,被观察者会触发它们之间进行循环调用,导致系统崩溃
虽然观察者模式可以随时使观察者知道所观察的对象发生了变化,但是观察者模式没有相应的机制使观察者知道所观察的对象是怎么发生变化的观察者模式使用场景:
观察者模式使用场景:
当一个对象的数据更新时需要通知其他对象,但这个对象又不希望和其他对象形成紧耦合。
当一个对象的数据更新时,这个对象需要让其他对象各自更新自己的数据,但这个对象不知道具体有多少对象更新数据。
例如微博的订阅,当我们订阅了某个人的微博账号,这个人发布了新的消息,就会通知我们,但他不知道也不需要知道要通知多少人。
边栏推荐
- Oracle-子查询
- Backpack Lecture 9 - detailed understanding and code implementation
- New paid Tarot calculation source code (with building tutorial)
- A high-frequency problem, three kinds of model thinking to solve this risk control problem
- Typescript variable declaration - type assertion
- Write time replication of hugetlbfs
- 工作好多年,回忆人生--高中三年
- ES6 data type map & set
- 2022第六季完美童模 合肥賽區 决賽圓滿落幕
- Notes on key words in the original English work biography of jobs (VIII) [chapter six]
猜你喜欢

随心玩玩(三)Mirai框架QQ机器人

Speech signal processing - Fundamentals (I): basic acoustic knowledge

2022第六季完美童模 合肥賽區 决賽圓滿落幕

新版付费塔罗牌测算源码 (附带搭建教程)

Does the SQL server run with administrator privileges? Or run it as a normal user?
![[hcie TAC] question 5-2](/img/a5/308aa2cced4cba59354c576a07e3c0.jpg)
[hcie TAC] question 5-2

CDGA|交通行业做好数字化转型的核心是什么?

【微服务|OpenFeign】openfeign的超时时间

51 MCU interrupt and timer counter, based on Puzhong technology hc6800-esv2.0

壁纸小程序源码双端微信抖音小程序
随机推荐
sql server 用 administrator 权限运行吗?还是以普通用户运行呢?
Some behaviors of Apple developers that are prone to investigation
ES6数据类型Map&Set
dcase_ Util tutorial
Set up Jenkins environment and automatically associate packaged project jars for automatic release
华为设备配置中型网络WLAN基本业务
NP3 格式化输出(一)
【微服务|OpenFeign】openfeign的超时时间
Debugging nocturnal simulator with ADB command
2022年7月(软考高级)信息系统项目管理师认证招生简章
Oracle subquery
分布式数字身份的几个“非技术”思考
名企实习一年要学会的15件事,这样你就省的走弯路了。
Chengtong network disk imitation blue playing network disk source code with video tutorial
Interprocess communication (IPC)
La finale de la zone de compétition Hefei de la sixième saison 2022 a été couronnée de succès.
关于父母离婚后子女姓名变更有关问题的批复
航芯开发板&调试器
MQTT第二话 -- emqx高可用集群实现
2022 Season 6 perfect children's model Haikou competition area trial successfully concluded