小菜学设计模式——观察者模式
小菜学设计模式——观察者模式
learn_more 发表于3年前
小菜学设计模式——观察者模式
  • 发表于 3年前
  • 阅读 173
  • 收藏 4
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: 本文是在学习《大话设计模式》所做的笔记,主要是个人理解面向对象、面向接口编程的设计模式:观察者模式

背景   

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


1、使用意图   

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


2、生活实例   

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

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

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

4、模式类图    

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

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

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

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


5、模式优点

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


6、与类似模式比较

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




  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 90
博文 240
码字总数 210196
×
learn_more
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: