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

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

hot3.png

背景   

    上一次去看电影院看电影,半旁边的妹子说只要扫一扫就能免费领取爆米花一份,你说我怎么躲得过妹子的招数呢?所以拿起我的手机,扫一扫,注册会员,ok 领取爆米花。时间过去了,我发现我的手机怎么老是收到一些乱七八糟的信息,一旦有什么大小事我都会收到信息,你可知道我是拒绝的。恩,这里就说说,观察者模式,因为我的手机号码已经成为他们发消息的接收者,或说监听器、或说观察者。

1、使用意图   

    当一个对象改变的同时需要改变其他对象时,观察者模式似乎很受用。

2、生活实例   

    饭点一到,所有同事包括我立刻放下手中的活,有看NBA的、有睡觉的,有直接去食堂排队等饭吃的。似乎这里少了一个通知的过程,呵呵,不要紧。

3、Java 例子(框架、JDK 、JEE)

    因为观察者的本质就是监听器,所以使用监听器最多的当然是Swing或AWT,比如一个按钮被点击会触发click事件,鼠标移动会触发mouseover事件等,事件触发,就会通知对应观察者(监听器)

4、模式类图    

225413_rkaM_1989321.jpeg

  1. 抽象主题角色(Subject):定义一个接口,声明作为主题角色应该具备的方法(对观察者对象的增删改之类的方法声明)。

  2. 主题角色(Concrete Subject):实现了抽象主题角色,实现了它的所有方法,并且含有一个抽象观察者角色的集合引用作为成员变量,也就是说一个主题角色可以拥有多个观察者。

  3. 抽象观察者角色(Observer):定义了一个接口,声明最为观察者角色应该具备的方法(这个方法是当观察者收到通知后做出的反应,一般就是update)。

  4. 具体观察者角色(Concrete Observer):实现抽象观察者角色,主要是实现接口中的update方法。

5、模式优点

  观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,是他们能够自动更新自己。(也叫做 发布-订阅模式)    观察者所做的工作其实就是解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。

6、与类似模式比较

  观察者模式是我们最常使用的设计模式之一,尤其是jQuery前端时,对于事件的注册都是观察者模式的一个淋漓尽致的体现。    观察者和其他模式的比较,感觉差距很大。

转载于:https://my.oschina.net/heweipo/blog/466249

你可能感兴趣的文章
Node.js 插件安装及常用插件
查看>>
(转载博文)VC++API速查
查看>>
【宣讲会感言】腾讯实习生
查看>>
Git 忽略
查看>>
iOS开发小技巧--iOS程序进入后台运行的实现
查看>>
七个错误可能引发网页布局灾难
查看>>
判断系统是否是中文的
查看>>
窗口改变的时候自动刷新浏览器
查看>>
Java 类型转换(int->String)
查看>>
OAF_开发系列18_实现OAF页面跳转setForwardURL / forwardImmediately(案例)
查看>>
ASP.NET Core Docker部署
查看>>
家宝贝项目历程之三(全部模块完成)
查看>>
img的onerror事件
查看>>
java代码-------Runnable的用法
查看>>
ZOJ4108 Fibonacci in the Pocket
查看>>
Python 数据图表工具的比较
查看>>
移动端版本兼容js
查看>>
mongos-sharding连接池配置
查看>>
jdbc方式mysql语句增删改查
查看>>
ruby symbol详解
查看>>