观察者模式 Observer

  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。

  这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。

观察者模式的组成

  抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。

  抽象观察者角色:为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。

  具体主题角色:在具体主题内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个子类实现。

  具体观察者角色:该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。通常用一个子类实现。如果需要,具体观察者角色可以保存一个指向具体主题角色的引用。

程序实例

  通过程序实例来说明观察者模式:

  首先定义抽象的观察者:

//抽象观察者角色
public interface Watcher
{public void update(String str);}

然后定义抽象的主题角色,即抽象的被观察者,在其中声明方法(添加、移除观察者,通知观察者):

//抽象主题角色,watched:被观察
public interface Watched
{public void addWatcher(Watcher watcher);public void removeWatcher(Watcher watcher);public void notifyWatchers(String str);}

然后定义具体的观察者:

public class ConcreteWatcher implements Watcher
{@Overridepublic void update(String str){System.out.println(str);}}

之后是具体的主题角色: 

import java.util.ArrayList;
import java.util.List;public class ConcreteWatched implements Watched
{// 存放观察者private List<Watcher> list = new ArrayList<Watcher>();@Overridepublic void addWatcher(Watcher watcher){list.add(watcher);}@Overridepublic void removeWatcher(Watcher watcher){list.remove(watcher);}@Overridepublic void notifyWatchers(String str){// 自动调用实际上是主题进行调用的for (Watcher watcher : list){watcher.update(str);}}}

编写测试类:

public class Test
{public static void main(String[] args){Watched girl = new ConcreteWatched();Watcher watcher1 = new ConcreteWatcher();Watcher watcher2 = new ConcreteWatcher();Watcher watcher3 = new ConcreteWatcher();girl.addWatcher(watcher1);girl.addWatcher(watcher2);girl.addWatcher(watcher3);girl.notifyWatchers("开心");}}

java设计模式---观察者模式相关推荐

  1. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  2. Java设计模式-观察者模式(订阅发布模式)

    Java设计模式-观察者模式(订阅发布模式) 一起来看 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持吧!! ...

  3. java设计模式 观察者模式_理解java设计模式之观察者模式

    在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的"观察者模 ...

  4. JAVA 设计模式 观察者模式

    用途 观察者模式 (Observer) 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观 ...

  5. java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解

    Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...

  6. Java设计模式——观察者模式

    转自:http://www.cnblogs.com/shamgod/p/4588557.html 一.概述 childe类中的是关联监听者dad的,若要再增加监听者,会很不方便,且要修改代码.好的方法 ...

  7. java设计模式-观察者模式

    观察者模式介绍: 观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种.在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提 ...

  8. Java设计模式——观察者模式与Spring事件监听器

    写在前面的话:终于通读了一遍<Spring源码深度解析>,在Spring的消息发布(Message)模块使用了设计模式中的观察者模式的经典实现,所以趁此机会总结一些. 1. 业务场景 Sp ...

  9. JAVA设计模式-观察者模式(Observe)

    观察者模式 其实就是一个发布者和订阅者之间的关系 如果订阅者订阅了发布者,那么发布者发布一条消息,订阅者就会立马知道. 中间的关系也就是订阅者需要去订阅消息(也就是,发布者的通知资源池子(也就是存储订 ...

最新文章

  1. 完胜ReLU!斯坦福的神经网络采用这种激活函数,竟高保真还原各种图像视频
  2. Linux Bash 笔记
  3. Winform中实现ZedGraph曲线图的图像复制到剪切板、打印预览、获取图片并保存、另存为的功能
  4. 【算法】梯度消失与梯度爆炸
  5. sqlserver存储过程的参数传递注意事项
  6. Spring 事务处理参数
  7. Servlet笔记10--Session
  8. JBoss + EJB3 + MySql : 开发第一个EJB
  9. element引入的组件大小高度不对_ElementUI 在 按需引入时定义 default size?
  10. gson将JSON字符串转成Java对象
  11. CentOS7查看开放端口命令及开放端口号
  12. Vue3 npm run serve 太慢的解决方法
  13. Latex 箭头、下标、符号上下写文字、正方形和三角形
  14. 深度 | 蚂蚁金融科技全面开放战略背后的“硬实力”
  15. 新生儿的二类(自费)疫苗(截止2019年)
  16. 入驻 【集简云开发者平台】,SDK嵌入接口文档介绍
  17. 学习笔记整理——vim,vim文件编码,vim配置文件
  18. SDB光猫虚拟服务器,折腾光猫/路由器[MIPS架构](1):用Samba服务器搭建家庭文件共享中心...
  19. 服务器换主板不换系统教程,主板要换,系统不变
  20. The Pilots Brothers' refrigerator开灯问题

热门文章

  1. Webstrom卡顿问题解决
  2. Android基础之一
  3. MySQL学习之路:多实例无法启动排错
  4. nutch2.1+mysql报错及解决
  5. 地球椭球体(Ellipsoid)、大地基准面(Datum)及地图投影(Projection)三者的基本概念
  6. 对于技术 方法 生活等问题的思考
  7. Oracle单实例打补丁
  8. 多层AOP 解决AOP执行顺序
  9. VMware vSphere4.1看图识HA
  10. ulimit调优|设置普通用户的ulimit值