简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新。

不多说了,直接给出实现:

例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观察者模式(转)的更多相关文章

  1. 用Spring提高java观察者模式灵活性

    在上篇博客 用java观察者模式解耦经典三层架构 的最后,用了一个Client类把Listener的实现类注冊到了LoginEventSource类中,假设须要加入�新的逻辑,加入�新的listene ...

  2. java: 观察者模式:Observable被观察者,Observer观察者

    java: 观察者模式:Observable被观察者,Observer观察者 以房子价格为例,卖房者为被观察者: import java.util.Observable; //被观察者子类化 publ ...

  3. java观察者模式

      像activeMQ等消息队列中,我们经常会使用发布订阅模式,但是你有没有想过,客户端时如何及时得到订阅的主题的信息?其实就里就用到了观察者模式.在软件系统中,当一个对象的行为依赖于另一个对象的状态 ...

  4. Java——观察者模式实例

    观察者模式(订阅/发布模式) 作者: 代码大湿 代码大湿 Java中观察者模式中主要是Observerable类(被观察者),和Observer接口(观察者).下面是个简单的demo //被观察者 p ...

  5. java 观察者模式 与spring配置

    一.Observer模式的意图: 在对象的内部状态发生变化时,自动通知外部对象进行响应. 二.Observer模式的构成: ·被观察者:内部状态有可能被改变,而且又需要通知外部的对象 ·观察者:需要对 ...

  6. Java观察者模式(Observer)

    一.定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己.主要应用在java的AWT事件机制 ...

  7. 说说Java观察者模式

    观察者模式是对象行为模式中的一种,在平时项目中经常被用来解耦对象之间的依赖. 观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新.别名:De ...

  8. java 观察者模式

    /** 抽象的观察者 */ public interface Watcher { // status 为 被被观察着传递过来的状态 public void update(String status); ...

  9. Java观察者模式(Observer模式)

    Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...

  10. java观察者模式的实现

    在看博客里,有个订阅功能,当你订阅后,当博主发布新的博客,你都能收到消息.这是如何实现的?是不是后台有个线程在不停的轮询?如果是这样的话,显然太耗资源,如果当博客在发布时,找到所有的订阅者,然后循环的 ...

随机推荐

  1. Quartz.NET学习系列

    Quartz.NET它是一个开源的任务调度引擎,对于周期性任务,持久性任务提供了很好的支持,并且支持持久性.集群等功能. 这是什么对我来说Quartz.NET学习记录: 源代码下载http://yun ...

  2. Vijos P1881 闪烁的星星 (加强自己多一点。。)

    假设每次查询不是整个长度,但[x, y]此时间间隔. . 闲来无事写的,感觉是正确的.这将成为合并范围. #include <cstdio> #include <cstring> ...

  3. MVC模型与FishiGUI应用层MVC型号

    MVC概要: MVC (Modal View Controler)M是指数据模型,V是指用户界面,C则是控制器. 使用MVC的目的是将M和V的实现代码分离,从而使同一个程序能够使用不同的表现形式.比方 ...

  4. Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理模式

    6.3.创建与管理模式 概述:DB内组织对象的一种逻辑结构.一个DB内能够有多个模式.在未指定模式时默认放置在public中.能够通过"\dn"方式查看数据库中现有模式: test ...

  5. 直接插入排序---java实现

    思路:遍历无序的原数组,把第i个的后一个即i+1去与前面的i个逐个比较... 解法一: package com.sheepmu.text; import java.util.Arrays; /* * ...

  6. javascript 正则匹配 提取所有 preg_match_all matchAll方法

    javascript 提取全部的的方法.javascript中没有matchAll这种方法. 用while来实现类似 PHP 中的preg_match_all() :(by default7#zbph ...

  7. [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)

    ---------------------------------------------------------------------------------------------------- ...

  8. 【Web探索之旅】第二部分第四课:数据库

    内容简介 1.第二部分第四课:数据库 2.第二部分第五课预告:响应式网站 第二部分第四课:数据库 说到“数据库”,顾名思义,是“数据的仓库”的意思. 所以数据库的一大作用就是储存数据咯. 为什么Web ...

  9. SRS微信号和QQ组

    联系方式:https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Contact $(function () { $('pre.prett ...

  10. UVa 12683 Odd and Even Zeroes(数论+数字DP)

    意甲冠军: 要求 小于或等于n号码 (0<=n <= 1e18)尾数的数的阶乘0数为偶数 思考:当然不是暴力,因此,从数论.尾数0数为偶数,然后,它将使N阶乘5电源是偶数.(二指数肯定少5 ...