2019独角兽企业重金招聘Python工程师标准>>>

1.相关类介绍

public class Observable extends Object
此类表示模型视图范例中的 observable 对象,或者说“数据”。可将其子类化,表示应用程序想要观察的对象。 
一个 observable 对象可以有一个或多个观察者。观察者可以是实现了 Observer 接口的任意对象。一个 observable 实例改变后,调用 Observable 的 notifyObservers 方法的应用程序会通过调用观察者的 update 方法来通知观察者该实例发生了改变。 
未指定发送通知的顺序。Observable 类中所提供的默认实现将按照其注册的重要性顺序来通知 Observers,但是子类可能改变此顺序,从而使用非固定顺序在单独的线程上发送通知,或者也可能保证其子类遵从其所选择的顺序。

注意,此通知机制与线程无关,并且与 Object 类的 wait 和 notify 机制完全独立。 
新创建一个 observable 对象时,其观察者集是空的。当且仅当 equals 方法为两个观察者返回 true 时,才认为它们是相同的。 
--------------------------------------------------------------------------------
构造方法摘要 
Observable() 
          构造一个带有零个观察者的 Observable。 
  方法摘要 
 void addObserver(Observer o) 
          如果观察者与集合中已有的观察者不同,则向对象的观察者集中添加此观察者。 
protected  void clearChanged() 
          指示对象不再改变,或者它已对其所有的观察者通知了最近的改变,所以 hasChanged 方法将返回 false。 
 int countObservers() 
          返回 Observable 对象的观察者数目。 
 void deleteObserver(Observer o) 
          从对象的观察者集合中删除某个观察者。 
 void deleteObservers() 
          清除观察者列表,使此对象不再有任何观察者。 
 boolean hasChanged() 
          测试对象是否改变。 
 void notifyObservers() 
          如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。 
 void notifyObservers(Object arg) 
          如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。 
protected  void setChanged()

标记此 Observable 对象为已改变的对象;现在 hasChanged 方法将返回 true。

public interface Observer
一个可在观察者要得到 observable 对象更改通知时可实现 Observer 接口的类。 
--------------------------------------------------------------------------------
方法摘要 
 void update(Observable o, Object arg) 
          只要改变了 observable 对象就调用此方法。

2.实例

//观察者1
public class SmtpObserver implements Observer
{@Overridepublic void update(Observable o, Object arg){System.out.println(arg.toString());}
} //观察者2
public class Pop3Observer implements Observer
{@Overridepublic void update(Observable o, Object arg){System.out.println(arg.toString());}
}//主体 被观察者
public class Subject extends Observable{   /**  * 业务方法,一旦执行某个操作,则通知观察者  */  public void doBusiness(){   if (true) {   super.setChanged();   }   notifyObservers("hello");   }   public static void main(String [] args) {   //创建一个被观察者   Subject subject = new Subject();   //创建两个观察者   Observer smtpObserver = new SmtpObserver();   Observer pop3Observer = new Pop3Observer();   //把两个观察者加到被观察者列表中   subject.addObserver(smtpObserver);   subject.addObserver(pop3Observer);   //执行业务操作   subject.doBusiness();   }
}

转载于:https://my.oschina.net/u/2336511/blog/392377

Java中的观察者模式相关推荐

  1. java中线程观察者模式_设计模式之--观察者模式

    在日常生活中,有很多需要我们关注的事务(比如,股市,楼市等),这些事务我们可以称之为主题或者叫信息发布者,观察主题的目的是想了解主题的变化(消息).一种方法当然是采用盯人策略,但这种方法有个固有的缺点 ...

  2. JAVA中的观察者模式observer

    简介: 在java.util包下, 观察者继承observable类,设置变化点setChanged();通知改变的内容notifyObservers(); 被观察者继承observer接口,覆写uo ...

  3. 设计模式:java及spring观察者模式(有利于代码解耦)

    http://www.cnblogs.com/softidea/p/5716870.html 什么是ApplicationContext?  它是Spring的核心,Context我们通常解释为上下文 ...

  4. Java中使用Observer接口和Observable类实践Observer观察者模式

    在Java中通过Observable类和Observer接口实现了观察者模式.实现Observer接口的对象是观察者,继承Observable的对象是被观察者. 1. 实现观察者模式 实现观察者模式非 ...

  5. java观察者模式在spring中的应用_Spring源码之spring中的观察者模式和监听器的使用...

    声明:本文根据鲁班学院子路老师spring中观察者模式课程整理得来 观察者模式特点: 被观察者持有监听的观察者的引用. 被观察者支持增加和删除的观察者. 被观察者状态改变通知观察者. JDK中观察者i ...

  6. java观察者模式在spring中的应用_在Spring中使用观察者模式

    菜鸟教程中关于观察者模式的介绍如下: 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 主要解决:一个对象状态改变给其他对象通知的问题,而 ...

  7. 深入理解Java中的内存泄漏

    理解Java中的内存泄漏,我们首先要清楚Java中的内存区域分配问题和内存回收的问题本文将分为三大部分介绍这些内容. Java中的内存分配 Java中的内存区域主要分为线程共享的和线程私有的两大区域: ...

  8. Java 设计模式之观察者模式

    一.了解观察者模式 1.1 什么是观察者模式 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象状态改变时,它的所有依赖者都会收到通知并自动更新. 典型的问题比如报社,只要你是他们的订户,他们 ...

  9. [java设计模式简记] 观察者模式(Observer-Pattern)

    观察者模式(Observer-Pattern) 数据主体拥有需要数据的对象的数据,并且数据改变时需要数据的对象要及时知道 意图: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖 ...

最新文章

  1. Android初学第36天
  2. 真是没想到,Springboot + Flowable 开发工作流会这么简单!
  3. bartender外部表不是预期格式_三张表轻松搞定项目计划
  4. 山东省2021年高考成绩查询平台6,山东2021年高考成绩改为6月26日前公布
  5. 的c语言_什么是C语言?C语言的简介
  6. Oracle 12C R2-新特性-PDB的磁盘I/O(IOPS,MBPS)资源管理
  7. 通过简单案例,理解观察者模式
  8. 捷讯fw300r虚拟服务器口号,迅捷FW300R开启UPnP功能
  9. android生成透明图片格式,Android编程实现图片透明的方法
  10. 基于JAVA社区养老服务管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  11. 网络编程--TCP/IP协议(二)
  12. 如何寻找数组中最大值与最小值(取双元素法)
  13. 关于基本三角函数反函数的图像问题+正切,余切
  14. 计算机器设备重置成本时不应计入的费用是,自考《资产评估00158》章节试题:第3章...
  15. 5611AH 数码管 引脚图
  16. html怎么把按钮做成可以百度,网站网页中加入各种分享按钮功能 百度分享
  17. IP-guard安全U盘操作手册
  18. MySQL查询满足条件的连续时间段
  19. Mac 查看隐藏文件(夹)
  20. SYN480R 解码

热门文章

  1. 别再傻傻地用这些软件G转P了,修复后不稳定的真相在这里
  2. 错误解决记录------------mysql连接本地数据库显示can't get hostname for your address
  3. intent的startActivityForResult()方法
  4. RTP:实时应用程序传输协议
  5. 2012-06-04 老男孩老师 “我毕业了”(转)
  6. 5G 标准 — R18
  7. 分层设计与领域设计融合架构设计
  8. 用 C 语言开发一门编程语言 — Q-表达式
  9. C 语言编程 — 高级数据类型 — 共用体
  10. Openstack Nova 源码分析 — RPC 远程调用过程