设计模式之观察者模式, 个人感觉相当的重要

Posted look at me now

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之观察者模式, 个人感觉相当的重要相关的知识,希望对你有一定的参考价值。

原文地址:点击就送


观察者模式: (又被成为发布订阅模式, 模型-视图模式, 源-收听者模式或从属者模式) 是软件设计模式的一种. 在这种模式中, 一个目标物件管理所有依赖于他的观察者物件, 并且在它本身的状态改变时, 主动发出通知. 这通常透过呼叫各观察者所提供的方法来实现. 此种模式通常被用来视作事件处理系统.


UML 看图

在jdk中有 观察者模式的例子

  • Observer观察者接口
  • 被观察者类 Observable
  • 被观察者发生改变时会通知观察者

观察者模式: 总体上被分为两种

  • 发布-订阅类的问题处理
  • 事件驱动模型: 类似web开发的监听器
  • ps:补充一下序列化 key 地址改变, 反序列不会调用构造等

事件驱动模型


这两种代码上的区别

  • 发布订阅: 被观察者需要继承Observable, 观察者需要实现Observer
  • 事件驱动模型: 主动方需要实现 WriterListener[]

总结:

  • 这两种模型达到的效果看上去是一样的, 观察者模式更加贴近现实业务, 事件驱动比观察者不用的地方
  • 观察者模式中理论上针对被观察者的动作是唯一的, 尽管update中有两个参数 一个是对象 一个算是标识, 在监听者模式中算是自定义的 - 注意点实际动作都是由监听者来实现的, 被监听者调用
  • 事件驱动更加的灵活, 但是系统复杂度作为代价, 也就是由事件源自己来维护监听队列
  • 观察者模式的局限性: 如果被观察者原来就有父类, 尽管可以用适配器模式, 但是事件驱动事件源的监听列表是自己维护的
  • 观察者模式中, 只能用update来触发对应的操作, 尽管有第二个参数作为双方约定, 事件驱动的信息都是封装在event中由监听者自己来定义, 监听者明白自己想要什么

文中最后举了一个类子, 感冒了脑袋有点晕,自我总结下

  • button是触发事件的媒介, 需要注册点击事件(监听+具体实现), 比如双击这个操作, 用户双击, 事件发生

整个观察者模式主要分为两大块

  • 观察者模式: 发布--订阅, 变化--更新
  • 事件驱动模型: 请求--响应, 事件发生--事件处理
  • 也就是应用场景经典代表作者与读者, 按钮事件

进度还有 75% fight

以上是关于设计模式之观察者模式, 个人感觉相当的重要的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之二:观察者模式(Observer Pattern)

Java 设计模式之观察者模式

设计模式之观察者模式

模式发布与订阅模式和观察者模

设计模式之观察者模式

设计模式之观察者模式