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

时间: 2024-10-17 13:52:50

java观察者模式(转)的相关文章

Java观察者模式 : Observer / Observable

/** Java观察者模式的场景:一个女孩洗澡,被很多男孩偷看. 女孩洞察后,搜索坏男孩,然后继续洗澡. 三个类:Boy,Girl还有主类MainClass. */ /* 男孩 Boy.java */ import java.util.Observable; import java.util.Observer; public class Boy implements Observer{ private String name=""; public Boy(String name){ t

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

在上篇博客 用java观察者模式解耦经典三层架构 的最后,用了一个Client类把Listener的实现类注冊到了LoginEventSource类中,假设须要加入?新的逻辑,加入?新的listener类后,还是须要改动Client类,那么我们能够借助spring提供的容器来帮助我们完好观察者模式. 在spring,在src下建立spring配置文件 <bean id="sessionFactory" class="org.springframework.orm.hib

用java观察者模式解耦经典三层架构

三层架构是一个很经典的架构模式,依据系统的职责不同.将系统分成了表现层,逻辑层和数据訪问层,而且配合数据实体进行传输数据,能够大大的封装性和复用性. 经典的三层架构图: 我们再深入到架构图内部.看看详细的类图,用简单的登陆举例吧: 这里通过LoginUI.调用了LoginLogService和LoginVerificationService两个类.通过类图能够看得出,U层和Service层(本文把BLL层称为了Service层)直接採用了直接调用的方式. 在面向对象的设计中.一直强调要面向接口编

java观察者模式

观察者设定一个观察目标,根据观察目标的变化,观察者采取相应的应对行为---观察者模式 1 //玩家类 2 public class Player { 3 4 private String name; 5 private Team t; 6 7 public Player(String name){ 8 this.name = name; 9 } 10 11 public String getName(){ 12 return name; 13 } 14 15 public void setTea

java观察者模式详解

简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新. 观察者模式的结构 观察者(Observer)模式是对象的行为型模式,又叫做发表-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-收听者(Source/Listener)模式或从属者(Dependents)模式. 本模式的类图结构如下: 图1.观察者模式的静态结构

java 观察者模式

/** 抽象的观察者 */ public interface Watcher { // status 为 被被观察着传递过来的状态 public void update(String status); } import java.util.LinkedList; /** 抽象的被观察者 */ public abstract class Watched { /** 用来保存注册的观察者对象 */ protected LinkedList<Watcher> watcherList = new Li

Java观察者模式(Observer模式)

Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Observer(观察者)模式是比较常用的一个模式,尤其在界面设计中应用广泛,而本教程所关注的是Java在电子商务系统中应用,因此想从电子商务实例中分析Observer的应用. 虽然网上商店形式多样,每个站点有自己的特色,但也有其一般的共性,单就"

java观察者模式的实现

在看博客里,有个订阅功能,当你订阅后,当博主发布新的博客,你都能收到消息.这是如何实现的?是不是后台有个线程在不停的轮询?如果是这样的话,显然太耗资源,如果当博客在发布时,找到所有的订阅者,然后循环的把消息发给订阅者,这样就会显得更人性化了.这就是观察者模式,观察者模式有两个对象:博主,订阅者.当读者在订阅时,会把读者信息放到一个队列里面去,方便在博客主布时循环这个对列并发送消息.如此一分析,代码就出来了: 先是订阅者: public interface Observers { public v

Java中的设计模式(七):观察者模式

介绍 观察者模式是行为设计模式之一.当您对对象的状态感兴趣并希望在有任何更改时收到通知时,观察者设计模式非常有用.在观察者模式中,监视另一个对象状态的对象称为Observer,正在被监视的对象称为Subject. 根据GoF,观察者设计模式的意图是; 定义对象之间的一对多依赖关系,以便当一个对象更改状态时,将自动通知和更新其所有依赖项. Subject包含一个观察者列表,用于通知其状态的任何变化,因此它应该提供观察者可以注册和注销自己的方法.Subject还包含一种方法,用于通知所有观察者任何更