博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式—观察者模式
阅读量:6669 次
发布时间:2019-06-25

本文共 878 字,大约阅读时间需要 2 分钟。

一、概念

观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新(The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically.)。 

二、观察者模式的组成

Subject(被观察的对象接口)

  • 规定ConcreteSubject的统一接口;
  • 每个Subject可以有多个Observer;

ConcreteSubject(具体被观察对象)

  • 维护对所有具体观察者的引用的列表;
  • 状态发生变化时会发送通知给所有注册的观察者。

Observer(观察者接口)

  • 规定ConcreteObserver的统一接口;
  • 定义了一个update()方法,在被观察对象状态改变时会被调用。

ConcreteObserver(具体观察者)

  • 维护一个对ConcreteSubject的引用;
  • 特定状态与ConcreteSubject同步;
  • 实现Observer接口,通过update()方法接收ConcreteSubject的通知。

 

三、应用场景

  • 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
  • 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。

 

四、优缺点

优点:

  • Subject和Observer之间是松偶合的,分别可以各自独立改变。
  • Subject在发送广播通知的时候,无须指定具体的Observer,Observer可以自己决定是否要订阅Subject的通知。
  • 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。

缺陷:

  • 松偶合导致代码关系不明显,有时可能难以理解。
  • 如果一个Subject被大量Observer订阅的话,在广播通知的时候可能会有效率问题。(毕竟只是简单的遍历)

   

 

参考资料:              

转载地址:http://jcoxo.baihongyu.com/

你可能感兴趣的文章
MP3转换AAC格式哪个音频转换器好
查看>>
黑苹果装机记录
查看>>
Xamarin.Forms vs Xamarin Native
查看>>
企业服务,赛道决定路径
查看>>
CNCF多元化奖学金系列:让微服务、Kubernetes和云原生连接
查看>>
2018-2019年中国CDN市场发展报告:阿里云成为中国CDN市场的领军者
查看>>
教你如何快速将音频文件AAC转换成MP3格式
查看>>
Web前端开发标准规范
查看>>
106. Construct Binary Tree from Inorder and Postorder Traversal
查看>>
如何导入golang.org的包
查看>>
软件测试的艺术第六章总结
查看>>
有关微信域名被拦截的经验分享
查看>>
常用数据结构
查看>>
在Antd-Pro下实现文件下载
查看>>
基于Nodejs的前端灰度发布方案_20190228
查看>>
解决Jenkins可选插件列表为空提示“connect time out”问题
查看>>
RN基础
查看>>
304. Range Sum Query 2D - Immutable
查看>>
Redis实现广告缓存、并完善缓存击穿
查看>>
如何绘制最美的鱼骨图?
查看>>