zoukankan      html  css  js  c++  java
  • 设计模式之观察者模式, 个人感觉相当的重要(七)

    原文地址:点击就送


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


    UML 看图

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

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

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

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

    事件驱动模型


    这两种代码上的区别

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

    总结:

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

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

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

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

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

    进度还有 75% fight

  • 相关阅读:
    兴趣与心态比较重要【转】
    网站发布到iis上,附加进程调试,打不到断点
    MVC时间格式化
    javascript数组扁平化处理
    Object.prototype.toString.call()
    获取浏览器大小
    HTTP状态码
    未能加载文件或程序集“Microsoft.ReportViewer.WebForms, Version=10.0.0.0
    javascript基础知识-1
    Html5上传图片的预览
  • 原文地址:https://www.cnblogs.com/denghailei/p/6650053.html
Copyright © 2011-2022 走看看