- 浏览: 574306 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
Java Observer(观察者)与Observable(被观察者-->实体)实现观察者模式
- 博客分类:
- java
在Java中通过Observable类和Observer接口实现了观察者模式。Observer对象是观察者,Observable对象是被观察者。
1. 实现观察者模式
实现观察者模式非常简单,
[1]创建被观察者类,它继承自java.util.Observable类;
[2]创建观察者类,它实现java.util.Observer接口;
[3]对于被观察者类,
添加它的观察者:
当被观察事件发生时,执行:
setChange()方法用来设置一个内部标志位注明数据发生了变化;
notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法,通知它们数据发生了变化。
只有在setChange()被调用后,notifyObservers()才会去调用update()。
[4]对于观察者类,实现Observer接口的唯一方法update
形参Object arg,对应一个由notifyObservers(Object arg);
传递来的参数,当执行的是notifyObservers();时,arg为null。
实例
NumObserable是一个被观察者,当它的成员变量data的数值发生变化时,会通知所有的观察者。
NumObserver是观察者。当它的被观察者(NumObserable)执行了notifyObservers()后,它会执行update()方法。
测试类SingleTest,在这里将观察者加入到被观察者的观察列表中。
结果:
Data has changed to 1
Data has changed to 2
Data has changed to 3
转自:http://zhangjunhd.blog.51cto.com/113473/68949/
1. 实现观察者模式
实现观察者模式非常简单,
[1]创建被观察者类,它继承自java.util.Observable类;
[2]创建观察者类,它实现java.util.Observer接口;
[3]对于被观察者类,
添加它的观察者:
void addObserver(Observer o)
当被观察事件发生时,执行:
setChanged(); notifyObservers();
setChange()方法用来设置一个内部标志位注明数据发生了变化;
notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法,通知它们数据发生了变化。
只有在setChange()被调用后,notifyObservers()才会去调用update()。
[4]对于观察者类,实现Observer接口的唯一方法update
void update(Observable o, Object arg)
形参Object arg,对应一个由notifyObservers(Object arg);
传递来的参数,当执行的是notifyObservers();时,arg为null。
实例
NumObserable是一个被观察者,当它的成员变量data的数值发生变化时,会通知所有的观察者。
package com.zj.observer; import java.util.Observable; public class NumObservable extends Observable { private int data = 0; public int getData() { return data; } public void setData(int i) { data = i; setChanged(); notifyObservers(); } }
NumObserver是观察者。当它的被观察者(NumObserable)执行了notifyObservers()后,它会执行update()方法。
package com.zj.observer; import java.util.Observable; import java.util.Observer; public class NumObserver implements Observer{ public void update(Observable o, Object arg) { NumObservable myObserable=(NumObservable) o; System.out.println("Data has changed to " +myObserable.getData()); } }
测试类SingleTest,在这里将观察者加入到被观察者的观察列表中。
package com.zj.observer; public class SingleTest { public static void main(String[] args) { NumObservable number = new NumObservable(); number.addObserver(new NumObserver()); number.setData(1); number.setData(2); number.setData(3); } }
结果:
Data has changed to 1
Data has changed to 2
Data has changed to 3
转自:http://zhangjunhd.blog.51cto.com/113473/68949/
发表评论
文章已被作者锁定,不允许评论。
-
java WeakHashMap学习(key是弱引用)
2018-06-21 09:31 1184在Java集合中有一种特殊的Map类型:WeakHashMap ... -
java HashMap TreeMap(key顺序) LinkedHashMap(插入顺序)学习
2018-06-07 10:27 910java为数据结构中的映射定义了一个接口java.util.M ... -
java RESTful 详解
2018-04-27 11:35 591(1)每一个URI代表一种资源,独一无二; (2)客户端 ... -
java 通过HttpsUrlConnection访问接口数据
2018-04-19 11:25 919server: ssl: key-stor ... -
java 使用多线程的场景总结
2018-04-10 14:35 1658在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在 ... -
java Enum枚举设置
2018-04-10 10:55 448/** * 数据状态:0:无效,1:有效 **/ ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1570REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
java FYOpenApi实现短信发送
2018-01-02 17:10 10831.配置文件 sms.OpenUrl = http://s ... -
java JSONObject序列化包含Date类型数据的Java对象
2017-12-26 16:31 1559如果Date.class无法进行转换则使用Timestamp. ... -
java 用HttpsURLConnection进行传递中文时错误总结
2017-12-07 16:42 602传递中文时需要用Writer而不是OutputStream ... -
java 内存泄漏
2017-11-27 13:51 4651.内存溢出 out of memory ... -
ActiveMQ 三种发送消息方式(同步,异步,单向)
2017-11-17 10:25 2303MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、 ... -
java Guava ListenableFuture实现线程回调功能
2017-11-14 10:17 1748java Future具有局限性。在实际应用中,当需要下 ... -
java Curator实现分布式锁
2017-09-05 14:39 1059Curator实现分布式锁主要依赖于zookeeper ... -
java Guava工具集学习(强大)
2017-09-05 10:28 411import java.util.Iterator ... -
java CyclicBarrier进行并发编程
2017-08-25 15:44 626CyclicBarrier允许一组线程相互等待达到一个公共的障 ... -
java 几种性能优化的总结
2017-08-23 14:08 2851、使用StringBuilder 一般 ... -
java 使用kyro进行高性能序列化对象和集合
2017-08-23 14:05 2091import java.io.ByteArrayInp ... -
java 对重复电话号码进行排除的优化(排序和前后对比)
2017-08-22 14:14 7441.先对10万数据排序; 2.对比前后两条数据 ; 3.筛 ... -
ActiveMQ 结合Spring进行数据同步
2017-07-19 15:27 550注意事项hibernate配置文件必须设置自动提交否则不能插入 ...
相关推荐
Java内置的Observable类和Observer接口提供了基本的观察者模式功能,你可以通过继承Observable类和实现Observer接口来使用
观察者设计模式,java语言实现,完全自己代码实现,未使用observable和observer
Observer模式定义对象间的一对多的依赖关系,当一个对象(被观察者)的状态发生改变时, 所有依赖于它的对象(观察者)都得到通知并被自动更新。JDK里提供的observer设计模式的实现由java.util.Observable类和 java....
这样一来 当一个对象改变状态时 依赖它的对象都会收到通知并自动跟新 Java已经提供了对观察者Observer模式的默认实现 Java对观察者模式的支持主要体现在Observable类和Observer接口 ">观察者 Observer 模式定义:在...
主要介绍了 Java观察者设计模式(Observable和Observer)的相关资料,需要的朋友可以参考下
观察者模式介绍:Observable和Observer原理分析,手动实现简单MyObservable和MyObserver
观察者模式主要有观察者和被观察者2个对象,在该模式中,Observable表示被观察者,这个对象是一个抽象类,只能被继承。 Observer表示观察者,他是一个接口,所以观察者可以有多个,实现了该接口的类都是属于观察者。
android 观察者模式示例代码 android studio kotlin代码 基于java.uitl.*
Java实现一个模型、两个视图和两个控制器的功能软件,即采用MVC模式或者说是观察者模式,本程序通过输入球体半径,显示球体形状,面积体积等 Sphere.java package Model; import java.util.Observable; public class...
要通知到需要了解该变化的类,Windows编程中经常用到的是发消息,要是没有Windows的消息机制的话,自己做一套消息机制倒是可以,但也是徒增了工作量,再次想到了设计模式中的观察者模式,也可以实现这个想法,具体...
React观察者响应 React 组件中的事件。 让 React 真正具有React性。 这个现在对人来说都是相当特定的 - 理想情况下它应该支持 ES7 observable 接口,但这是有效的。 请参阅的讨论。去做 测试 可运行的例子 包含...
三要素Rxjava原理 基于 一种扩展的观察者模式的响应式编程框架RxJava原理可总结为:被观察者 (Observable) 通过 订阅(Subscribe) 按顺序发送事件 给观察者 (Observer), 观察者(Observer) 按顺序接收事件 & ...
观察者模式(Observer Pattern) - 定义对象间的一种一个(Observable)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的对象都得到通知并被自动更新。
简单观察者 具有ES6代理的简单观察者 安装 $ npm install simple-observer 用法 const { observable , observe , unobserve , isObservable } = require ( 'simple-observer' ) ; // Can't observe for Set/Map/...
观察者观察者数据结构来自 Addy Osmani 的《学习 JavaScript 设计模式》 Subject / Observable 数据结构的示例实现。
观察者模式定义了对象之间一对多的依赖, 这样一来, 当一个对象改变状态 所有依赖都会收到通知, 自动更新 :beer_mug:设计原则1: 为了交互对象之间的松耦合设计而努力 :star:实现细节 自己设计的Observer/Subject: 见 ...
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 ...
设计模式 策略模式 基础 抽象 封装 继承 多态 设计原则 ...java.util 包内包含最基本的 Observer 接口与 Observable 类,可自由使用 push / pull 问题 不要依赖于观察者被通知的次序 Observable 是一个类
观察者的路径可以根据observer配置进行过滤;原始对象在变为Observable被克隆数组详细信息: 支持通用的类对象突变支持的固有Array变异方法: pop , push , shift , unshift , reverse , sort , fill , ...
使用Java内建的观察者模式 java.util.Observable的黑暗面 设计箱内的工具 习题解答 …… 3 装饰者模式:装饰对象 4 工厂模式:烘烤OO的精华 5 单件模式:独一无二的对象 6 命令模式:封装调用 7 ...