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观察者模式的实现
在看博客里,有个订阅功能,当你订阅后,当博主发布新的博客,你都能收到消息.这是如何实现的?是不是后台有个线程在不停的轮询?如果是这样的话,显然太耗资源,如果当博客在发布时,找到所有的订阅者,然后循环的 ...
随机推荐
- 看PHP在内部迭代的动作
以下我们来了解怎样实现一个自己定义的迭代器,然后再開始慢慢理解迭代器的内部工作原理.先来看一个官方的样例: <? php class myIterator implements Iterator ...
- chain pattern
16.4 纯与不纯的职责链模式 职责链模式可分为纯的职责链模式和不纯的职责链模式两种: (1) 纯的职责链模式 一个纯的职责链模式要求一个具体处理者对象只能在两个行为中选择一个:要么承担 ...
- UVA 674 (入门DP, 14.07.09)
Coin Change Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent. We ...
- Android在API推荐的方式来实现SQLite数据库的增长、删除、变化、检查操作
package com.examp.use_SQLite.dao; import java.util.ArrayList; import java.util.List; import android. ...
- 80x86汇编小站站长简单介绍-2014年08月23日
[序言] 旧版的"80x86汇编小站站长简单介绍"已经过时了, 因此于2013年10月01日花费1个小时又一次更新和排版一次. [人生格言] 1] 一生都用头脑而不是情绪解决这个 ...
- cocos2d-x于android在call to OpenGL ES API with no current context
一.问题: 正在使用JNI离Java(Android)侧 打回来C++(Cocos2d-x)该函数返回消息.Cocos2d-x花掉了 看看 Eclipse的Log中.显示 有 call to Open ...
- C++实现堆排序
堆排序是合并排序和插入排序排序方法共同的长处.它的时间复杂度O(nlgn),这也是一个地方排序算法:在任何时候,外阵中拥有唯一不变的输入数组存储的元素.引进第一家引进什么样的堆堆. 1.建堆:堆数据结 ...
- JAVA开源爬虫,WebCollector,使用方便,有接口。
假设你想下载整个网站内容爬行动物,我不希望配置heritrix复杂的爬行动物,要选择WebCollector.项目github一个不断更新. github源地址:https://github.com/ ...
- HDU 1711 Number Sequence(算法验证)
该怎么做.每一个人的人生都应该自己掌握.你给不了别人一切.你也不懂别人的忧伤. 微笑不代表快乐.哭泣不一定悲伤 不努力怎么让关心你的人幸福.不努力怎么让看不起你的人绝望. 我用生命在奋斗--lx_Zz ...
- MVC 5 Ajax + bootstrap+ handle bar 例: 实现service 状态
Js Script <script src="../../Scripts/handlebars-v1.3.0.js"></script> <scrip ...