设计模式复习,代码是最好的说明。

定义:观察者模式定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新,属于行为类模式。

注意:观察者模式和发布订阅模式是有区别的,区别在于观察者模式是由目标进行调度,而发布订阅模式是由独立的调度中心进行调度,可以说发布订阅模式是观察者模式进一步解耦,在实际中被大量运用的一种模式。

UML:

代码:

abstract class Subject{private Vector<Observer> vector = new Vector<Observer>();public void addObserver(Observer observer){this.vector.add(observer);}public void deleteObserver(Observer observer){this.vector.remove(observer);}protected void notifyObserver(){for (Observer observer:vector){observer.update();}}abstract void doSomething();
}class ConcreteSubject extends Subject{void doSomething() {System.out.println("被观察者事件发生");this.notifyObserver();}
}interface Observer{void update();}class ConcreteObserver1 implements Observer{public void update() {System.out.println("观察者1收到");}
}class ConcreteObserver2 implements Observer{public void update() {System.out.println("观察者2收到");}
}

参考链接

http://blog.csdn.net/itachi85/article/details/50773358

http://www.cnblogs.com/lovesong/p/5272752.html

http://geeksun.iteye.com/blog/2232298

如有错误,欢迎指出!

Java观察者模式以及与订阅发布者模式区别相关推荐

  1. 生产者消费者模式与订阅发布者模式的区别

    订阅发布者模式本质上也是一种生产者消费者模式,订阅者是消费者,发布者是生产者.如果一定要说个区别,就是抽象级别的区别吧. 订阅者肯定是个消费者,但消费者不一定是订阅者,发布者一定是个生产者,但生产者不 ...

  2. EventBus—思考观察者模式与发布订阅者模式

    EventBus系列文章: EventBus-使用实践 EventBus-源码解析 1. 概述 EventBus是基于发布订阅者模式的消息处理框架. EventBus is an open-sourc ...

  3. RabbitMQ(五) 订阅发布者模式介绍以及代码实现

    概述: 在上一章节介绍的工作模式中,我们的消费会进行轮询发送给所有的消息消费者,每个消费者接受消息之和为全部消息.本章节介绍的订阅发布者模式则为:将消息传递给所有的消息消费者,每个消费者都能接受到全部 ...

  4. 用订阅/发布者模式解决异步函数结果依赖的问题

    我们都知道node是基于事件无阻塞i/o模型的,所以说大部分函数都是以异步实现的,请看下面代码: db.query(sql1, function (err, data) {//code })db.qu ...

  5. JavaScript设计模式:观察者模式与发布订阅者模式实现

    观察者模式 当对象之间存在一对多的依赖关系时,其中一个对象的状态发生改变,所有依赖它的对象都会收到通知,这就是观察者模式. 在观察者模式中,只有两种主体:目标对象 (Subject) 和 观察者 (O ...

  6. js-vue中常说的subscribe/publish(订阅/发布者模式)或观察者模式

    总结起来就是: 先订阅–再发布 1.将注册的函数收集起来. (订阅) 2.在触发时,逐个触发. (发布) 3.还可以根据key来删除某个监听函数. <!DOCTYPE html> < ...

  7. js观察者模式和发布订阅者模式

    一.观察者模式的理解 观察者模式:一个对象(称为subject)维持一系列依赖于它的对象(称为observer),将有关状态的任何变更自动通知给它们(观察者). 二.发布/订阅模式的理解 发布/订阅模 ...

  8. Vue观察者模式和发布订阅者模式

    什么是观察者模式? 例如:抖音上的小杨哥,当小杨哥在抖音开启直播时,会自动通知所有的粉丝. 小杨哥:直播间开播了! 小杨哥为目标   抖友为观察者 目标应该具备 收集观察者 删除观察者 通知观察者 & ...

  9. 『设计模式』80年代的人们就已经领悟了设计模式-- 发布者/订阅者模式 (包括发布者/订阅者模式和观察者模式的区别)

    23种设计模式+额外常用设计模式汇总 (持续更新) 发布-订阅模式 在软件架构中,发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者).而是将发布的消息分为 ...

最新文章

  1. UITableView HeaderView,FooterView 使用SnapKit布局导致约束异常
  2. 解决 The mysql extension is deprecated and will be r
  3. path classpath
  4. SOR迭代求解线性方程组代码实现
  5. Linux ubuntu中怎么生成随机数,随机数的生成
  6. JDBF读取DBF文件
  7. python 如何暂停程序?程序阻塞 (input()、time.sleep()、os.s*stem(“pause))
  8. Azure Redis Cache (3) 创建和使用P级别的Redis Cache
  9. rpm方式安装mysql-5.7.11
  10. 从Ant Build演进Gradle Build:导入Ant Build文件
  11. 易控INSPEC软件与欧姆龙PLC以太网通讯
  12. 【H3CTE认证和HCIE认证一样吗?】
  13. 一般python程序员的工资_【Python程序员工资|Python程序员待遇怎么样】-看准网
  14. html鼠标经过晃动代码,css3让div随鼠标移动而抖动起来
  15. 组合数学与计算机科学书籍,计算机科学丛书:组合数学(原书第5版)
  16. ubuntu18.04安装MPV视频播放器
  17. 克服焦虑--图解JVM内存模型和JVM线程模型
  18. python词云生成的图片为空白图片
  19. vb读取计算机mac地址,Re:在VB中如何取得网卡的mac地址?
  20. 关于Mysql查询时间粒度DATA_FORMAT使用说明

热门文章

  1. 2021年煤矿瓦斯抽采考试试卷及煤矿瓦斯抽采模拟试题
  2. QT界面迁移电脑时显示比例有问题的一种情况
  3. Oracle分析函数-count(*) over(partition by 分组 order by 排序)
  4. 数据结构学习心得——顺序表
  5. 大数据挖掘建模案例分享:利用BP神经网络算法进行用户行为分析(三)
  6. 系统补丁分发服务器,如何让服务器分发补丁
  7. python爬虫爬网站数据登录_使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)...
  8. 小游戏基与creator接入VIVO平台之小包模式和远程资源加载
  9. IOS OpenGL ES GPUImage 图像Sobel边缘检测,类似漫画反色 GPUImageSobelEdgeDetectionFilter
  10. 这些汽车消费的坑,你踩过哪些