java观察者模式(转)
简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新。
不多说了,直接给出实现:
例1:
- /**
- * 对某个事件只有一个订阅者的例子
- * @author yongxing.shao
- *
- */
- public class OneObserverExample {
- public static void main(String[] args) {
- IObserver observer = new Observer();
- EventNotifier notifier = new EventNotifier(observer);
- notifier.doWork();
- }
- }
- //对某事件感兴趣的观察者接口
- interface IObserver {
- public void processInterestedEvent();
- }
- /**
- * 当一事件发生时,需要通知实现IObserver接口的对象,并调用interesingEvent()方法
- * @author yongxing.shao
- *
- */
- class EventNotifier {
- private IObserver observer; //观察者
- private boolean somethingHappened; //标志事件是否发生
- public EventNotifier(IObserver observer) {
- this.observer = observer;
- this.somethingHappened = false;
- }
- public void doWork() {
- somethingHappened = true;
- if (somethingHappened) {
- //事件发生时,通过调用接口的这个方法来通知
- observer.processInterestedEvent();
- }
- }
- }
- /**
- * 观察者实现
- * @author yongxing.shao
- *
- */
- class Observer implements IObserver {
- private EventNotifier en;
- public Observer() {
- //新建一个事件通知者对象,并把自己传递给它
- this.en = new EventNotifier(this);
- }
- //实现事件发生时,实际处理事件的方法
- public void processInterestedEvent() {
- System.out.println("Observer: event happened");
- }
- }
例2:
- /**
- * 对某个事件存在多个订阅者
- * @author yongxing.shao
- *
- */
- public class ManyObserverExample {
- public static void main(String[] args) {
- EventNotifier notifier = new EventNotifier();
- IObserver observerA = new Observer("Observer A");
- IObserver observerB = new Observer("Observer B");
- //regist
- notifier.regist(observerA);
- notifier.regist(observerB);
- notifier.doWork();
- }
- }
- /**
- * 对某事件感兴趣的观察者接口
- * @author yongxing.shao
- *
- */
- interface IObserver {
- public void processInterestedEvent(String event);
- }
- class Observer implements IObserver {
- private String name;
- public Observer(String name) {
- this.name = name;
- }
- //实现事件发生时,实际处理事件的方法
- public void processInterestedEvent(String event) {
- System.out.println(name + ": [" + event + "] happened.");
- }
- }
- /**
- * 当一事件发生时,需要通知实现IObserver接口的对象,并调用interesingEvent()方法
- * @author yongxing.shao
- *
- */
- class EventNotifier {
- private List<IObserver> observers = new ArrayList<IObserver>(); //观察者
- public void regist(IObserver observer) {
- observers.add(observer);
- }
- public void doWork() {
- for (IObserver observer : observers) {
- observer.processInterestedEvent("sample event");
- }
- }
- }
http://blog.csdn.net/xyls12345/article/details/26386885
java观察者模式(转)的更多相关文章
- 用Spring提高java观察者模式灵活性
在上篇博客 用java观察者模式解耦经典三层架构 的最后,用了一个Client类把Listener的实现类注冊到了LoginEventSource类中,假设须要加入�新的逻辑,加入�新的listene ...
- java: 观察者模式:Observable被观察者,Observer观察者
java: 观察者模式:Observable被观察者,Observer观察者 以房子价格为例,卖房者为被观察者: import java.util.Observable; //被观察者子类化 publ ...
- java观察者模式
像activeMQ等消息队列中,我们经常会使用发布订阅模式,但是你有没有想过,客户端时如何及时得到订阅的主题的信息?其实就里就用到了观察者模式.在软件系统中,当一个对象的行为依赖于另一个对象的状态 ...
- Java——观察者模式实例
观察者模式(订阅/发布模式) 作者: 代码大湿 代码大湿 Java中观察者模式中主要是Observerable类(被观察者),和Observer接口(观察者).下面是个简单的demo //被观察者 p ...
- java 观察者模式 与spring配置
一.Observer模式的意图: 在对象的内部状态发生变化时,自动通知外部对象进行响应. 二.Observer模式的构成: ·被观察者:内部状态有可能被改变,而且又需要通知外部的对象 ·观察者:需要对 ...
- Java观察者模式(Observer)
一.定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己.主要应用在java的AWT事件机制 ...
- 说说Java观察者模式
观察者模式是对象行为模式中的一种,在平时项目中经常被用来解耦对象之间的依赖. 观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新.别名:De ...
- java 观察者模式
/** 抽象的观察者 */ public interface Watcher { // status 为 被被观察着传递过来的状态 public void update(String status); ...
- Java观察者模式(Observer模式)
Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...
- java观察者模式的实现
在看博客里,有个订阅功能,当你订阅后,当博主发布新的博客,你都能收到消息.这是如何实现的?是不是后台有个线程在不停的轮询?如果是这样的话,显然太耗资源,如果当博客在发布时,找到所有的订阅者,然后循环的 ...
随机推荐
- fscanf()功能具体解释
一旦文件被解析常规时间或使用正则表达式.或者是敲自己太傻代码来解析一个普通文件. 今天突然发现c该图书馆有一个现成的文件可以解析常规功能,这是fscanf()功能.哎 曾经自己做了这么多无用功.在这里 ...
- 重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider
原文:重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider [源码下载] 重新想象 Wind ...
- python中使用traceback来追踪异常
test1.py中,当分母为0的时候,调用系统退出 #!/usr/bin/python import sys def division(a=1, b=1): if b==0: print 'b eq ...
- 学习FFmpeg API – 解码视频
本文转载 视频播放过程 首先简单介绍以下视频文件的相关知识.我们平时看到的视频文件有许多格式,比如 avi, mkv, rmvb, mov, mp4等等,这些被称为容器(Container), 不同的 ...
- 小米2S twrp 中文,支持双系统
更新日志: 更新日志: 汉化了要使用的功能 修改语言选择方式,修改为下拉方式 TDB(TrueDualBoot) 功能完美实现 **adb**功能,完美实现,无需特别操作(比CWM强大) 修改双系统切 ...
- 深入理解spring中的各种注解(转)
Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...
- 2014在百度之星资格赛的第二个问题Disk Schedule
事实上,我认为它可以用来费用流问题.但光建地图上加班. ..不科学啊.. . 因副作用太大,否则,必然在.最后,想啊想,或者使用dp对.... 别想了一维dp... .我不知道我是怎么想.无论如何,这 ...
- Hadoop学问Eclipse构建Hadoop工程
在此之前的基础Hadoop在官方文件HDFS.MapReduce架构.配置管理是学习,但是,一些地方的官方文件相当含糊的解释. 我们没有发挥人可以体验,某种官方文件似业务规则或要求,但是,真正的细节还 ...
- JAVA字符串格式化-String.format()使用
传统型格类型 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象. 熟悉C语言的同学应该记得C语言的sprintf()方法.两者有类似之处.format()方法有两种重载 ...
- [LeetCode235]Lowest Common Ancestor of a Binary Search Tree
题目: Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in th ...