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观察者模式的实现
在看博客里,有个订阅功能,当你订阅后,当博主发布新的博客,你都能收到消息.这是如何实现的?是不是后台有个线程在不停的轮询?如果是这样的话,显然太耗资源,如果当博客在发布时,找到所有的订阅者,然后循环的 ...
随机推荐
- Android:What is ART?
背景:Android4.2之前,安卓手机系统的应用程序均在Dalvik Java的虚拟机上执行,这样的执行模式还要依靠一个编译器来实现与应用程序的沟通.应用程序每次执行时,都须要将程序内的代码转变为机 ...
- Ubuntu 13.10 安装 Unity 8 试用截图
关于 Unity 8 有很多报道,Unity 8 相对于 Unity 7 变化相当大,这是 Ubuntu 团队打造的一款通用于 PC.手机.平板的桌面. Unity 8 已经登陆 ubuntu 13. ...
- 【Quick-COCOS2D-X 3.3 怎样绑定自己定义类至Lua之三】动手绑定自己定义类至Lua
查看[Quick-COCOS2D-X 3.3 怎样绑定自己定义类至Lua之二]新建项目中配制环境,我们完美的在新建项目中完毕了绑定须要的环境,接下来才是最关健的一步.绑定自己定义C++类至Lu ...
- 性能是全新的 SEO
作为一个前端project师,那不只就是公开地处理那些美丽的html5, css3 和javascript特效.小而重要的一部分工作就是要让项目朝着代码稳定和代码标准方向进展.设计.信息结构以及后台限 ...
- Linux注意到Makefile
规则: 目标 : 依靠 命令 make是怎样工作的: (1)make在当前文件夹下寻找makefile或Makefile. (2)假设找到,他会寻找文件里的第一个目标文件(target).并把这个文件 ...
- fork与vfork详解
一.fork函数 要创建一个进程,最基本的系统调用是fork,系统调用fork用于派生一个进程,函数原型如下: pid_t fork(void) 若成功,父进程中返回子进程ID,子进程中返回0,若出 ...
- 部署IIS错误
- Visual Prolog 的 Web 专家系统 (7)
GENI核心 -- 推理引擎(1)知识表示 GOAL最后一句是谓语infer(),它的含义是"论证". 因此,,进GENI核心,执行视图推理引擎. infer() infer(): ...
- UVA 11248 - Frequency Hopping(网络流量)
UVA 11248 - Frequency Hopping 题目链接 题意:给定一个网络,如今须要从1到N运输流量C,问是否可能,假设可能输出可能,假设不可能,再问能否通过扩大一条边的容量使得可能,假 ...
- Unbound classpath container: 'JRE System Library [jdk17060]' in project ***
项目报告的错误列表 Unbound classpath container: 'JRE System Library [jdk17060]' in project **** 误. 原因是,我升级JDK ...