`
vipqweer
  • 浏览: 52269 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

观察者模式 java实现

阅读更多

题目:每隔两秒触发一个事件打印出当前时间。

package Task;

import java.util.EventObject;
//定义一个类似 C# EventArgs 的类用来传递事件状态信息。
//一般要求继承自 java.util.EventObject,且以 Event 结尾。
public class DisplayEvent extends EventObject{
	public Timer source;
	//构造函数的参数传递产生事件的事件源
	public DisplayEvent(Timer source){
		super(source);
		this.source = source;
	}
}

package Task;

import java.util.Date;
import java.util.EventListener;

//通过接口来定义事件响应函数原型,就像c# delegate定义了响应函数的“模板”
//一般要求继承自 java.util.EventListener,且以 Listener 结尾。
public interface IDisplayListener extends EventListener{
	void ShowTime(DisplayEvent e,Date date);
}

package Task;

import java.util.Date;

//事件侦听者,实现侦听者接口
public class DisplayListener implements IDisplayListener{
	public void ShowTime(DisplayEvent e,Date date){
		System.out.println(date);
	}
}

package Task;

import java.util.Calendar;
import java.util.Vector;

//定义演示控件类,也就是事件源
public class Timer {
	//用一个java.util.Vector对象来存储所有的事件监听器对象。
	private Vector clicks = new Vector();
	//添加事件订阅。一般以 add( listener)方式拼写,并添加 synchronized 关键字。
	public synchronized void add(IDisplayListener listener) {
		clicks.add(listener);
	}
	//移除事件订阅。一般以 remove( listener)方式拼写,并添加 synchronized 关键字。
	public synchronized void remove(IDisplayListener listener) {
		clicks.remove(listener);
	}
	//触发事件。
	protected void doClickEvent(){
		Calendar calendar;
		while (true) {
			calendar = Calendar.getInstance();
			//锁定,避免在触发期间有事件被订阅或移除。
			synchronized (this) {
				//创建事件状态对象。
				DisplayEvent ce = new DisplayEvent(this);
				//循环触发所有的事件订阅方法。
				for (int i = 0; i < clicks.size(); i++) {
					IDisplayListener e = (IDisplayListener) clicks.get(i);
					e.ShowTime(ce, calendar.getTime());
				}
			}
			try {
				//进程睡2秒
				Thread.sleep(2000);
			} catch(Exception e) {
				System.out.println(e);
			}
		}
	}
	//模拟点击操作。
	public void Click() {
		doClickEvent();
	}
}

package Task;

public class Program {

	/**
	 * 观察者模式 java实现<br>
	 * 每隔2秒触发一个事件<br>
	 * 输出当前time<br>
	 * author:ZhangC
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Timer timer = new Timer();
		//实例化一个事件侦听者
		DisplayListener displayListener = new DisplayListener();
		//添加事件订阅。
		timer.add(displayListener);
		//触发
		timer.Click();
	}
}

 

分享到:
评论

相关推荐

    设计模式之观察者模式Java实现

    在Java中,观察者模式通常通过Java内置的`java.util.Observable`类和`java.util.Observer`接口来实现。`Observable`类代表被观察的对象,它可以有多个观察者,而`Observer`接口则定义了观察者的通用行为。 首先,...

    观察者模式java实现观察者设计模式

    在Java中,我们可以利用Java提供的内置监听器机制来实现观察者模式,例如`ApplicationListener`和`ApplicationEvent`,这两个类主要用于Swing或JavaFX应用程序中的事件处理。 首先,我们来看`ApplicationListener`...

    java 设计模式 观察者模式 简单实例 包括测试test类

    在Java中,观察者模式的实现通常基于Java的内置接口`java.util.Observer`和`java.util.Observable`。下面将详细解释观察者模式的概念、结构以及如何在Java中应用这个模式。 **观察者模式的核心概念:** 1. **主题...

    运用MVC模式及观察者模式的java小程序

    在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...

    设计模式--观察者模式java例子

    在Java中,观察者模式可以通过Java的内置接口`java.util.Observer`和`java.util.Observable`来实现。`Observer`接口代表观察者,而`Observable`类代表被观察的对象,也称为主题(Subject)。下面将详细介绍这两个...

    java观察者模式观察者模式

    观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...

    观察者模式Observer

    在Java中,`java.util.Observable`和`java.util.Observer`接口提供了内置的支持来实现观察者模式。开发者可以创建自己的类实现这两个接口,或者使用更现代的事件监听框架如JavaFX或Swing中的事件处理机制。 观察者...

    Java内置观察者模式

    本文将深入探讨Java内置的观察者模式,包括其原理、实现方式以及实际应用。 ### 观察者模式的核心概念 1. **主题(Subject)**:被观察的对象,也就是发出通知的一方。在Java中,通常通过实现`java.util....

    设计模式实现——观察者模式

    4. **Java实现**:在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了观察者模式的标准实现。`Observable`类代表主题,`Observer`接口代表观察者。通过`addObserver()`添加观察者,`...

    java实现观察者模式

    在Java中,观察者模式可以通过Java的内置API `java.util.Observable` 和 `java.util.Observer` 类来实现。`Observable` 类代表被观察的对象,而 `Observer` 接口则表示观察者。以下是对这两个关键类的详细解释: 1....

    Java观察者模式代码全解析

    Java标准库提供了`java.util.Observable`和`java.util.Observer`接口,用于实现观察者模式。 首先,我们需要创建一个`Observable`类的子类,代表我们的主题。这个类需要维护一个观察者列表,并提供添加、删除观察者...

    设计模式-观察者模式(讲解及其实现代码)

    在Java中,`java.util.Observable`和`java.util.Observer`类提供了观察者模式的内置支持。而在其他语言中,如C#、Python等,也可以轻松实现观察者模式,通过事件或委托机制。 总结来说,观察者模式是一种重要的设计...

    设计模式:观察者模式java和javabean

    在Java中,观察者模式通过`java.util.Observable`类和`java.util.Observer`接口来实现。`Observable`类代表被观察的对象,而`Observer`接口则表示观察者。下面我们将深入探讨这两个关键组件以及它们如何协同工作。 ...

    观察者模式源代码_java

    在Java中,观察者模式的实现通常依赖于`java.util.Observable`类和`java.util.Observer`接口。`Observable`类代表被观察的对象,而`Observer`接口则是观察者的接口。以下是对这两个关键组件的详细解释: 1. `...

    java观察者模式Demo

    观察者模式是软件设计模式中的一种行为...总的来说,"java观察者模式Demo"提供了一个使用Java标准库实现观察者模式的例子,这对于学习和理解设计模式是非常有帮助的,同时通过自定义实现还能进一步深入理解其工作原理。

    java 观察者模式 demo

    在Java中,观察者模式的实现主要依赖于Java的`java.util.Observable`类和`java.util.Observer`接口。`Observable`类代表被观察的对象,它可以有多个观察者;`Observer`接口则代表观察者,它们需要实现`update`方法来...

    java 了解观察者模式

    在Java中,观察者模式的实现主要依赖于`java.util.Observable`和`java.util.Observer`这两个接口。下面我们将详细探讨观察者模式的概念、工作原理以及如何在Java中实现它。 观察者模式的核心概念是“观察者”和“被...

    Java 观察者模式的浅析

    ### Java观察者模式详解 #### 一、观察者模式概述 观察者模式是一种常用的设计模式,主要用于处理对象间的一对多依赖...通过上述分析,我们可以看到Java中的观察者模式是如何实现的,以及它在实际开发中的应用价值。

    java设计模式之观察者模式

    在Java中,观察者模式通常通过`java.util.Observable`和`java.util.Observer`这两个接口来实现。`Observable`类代表被观察的对象,它可以添加多个观察者,并在状态变化时通知它们。而`Observer`接口则定义了观察者的...

Global site tag (gtag.js) - Google Analytics