题目:每隔两秒触发一个事件打印出当前时间。
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.util.Observable`类和`java.util.Observer`接口来实现。`Observable`类代表被观察的对象,它可以有多个观察者,而`Observer`接口则定义了观察者的通用行为。 首先,...
在Java中,我们可以利用Java提供的内置监听器机制来实现观察者模式,例如`ApplicationListener`和`ApplicationEvent`,这两个类主要用于Swing或JavaFX应用程序中的事件处理。 首先,我们来看`ApplicationListener`...
在Java中,观察者模式的实现通常基于Java的内置接口`java.util.Observer`和`java.util.Observable`。下面将详细解释观察者模式的概念、结构以及如何在Java中应用这个模式。 **观察者模式的核心概念:** 1. **主题...
在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...
在Java中,观察者模式可以通过Java的内置接口`java.util.Observer`和`java.util.Observable`来实现。`Observer`接口代表观察者,而`Observable`类代表被观察的对象,也称为主题(Subject)。下面将详细介绍这两个...
观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...
在Java中,`java.util.Observable`和`java.util.Observer`接口提供了内置的支持来实现观察者模式。开发者可以创建自己的类实现这两个接口,或者使用更现代的事件监听框架如JavaFX或Swing中的事件处理机制。 观察者...
本文将深入探讨Java内置的观察者模式,包括其原理、实现方式以及实际应用。 ### 观察者模式的核心概念 1. **主题(Subject)**:被观察的对象,也就是发出通知的一方。在Java中,通常通过实现`java.util....
4. **Java实现**:在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了观察者模式的标准实现。`Observable`类代表主题,`Observer`接口代表观察者。通过`addObserver()`添加观察者,`...
在Java中,观察者模式可以通过Java的内置API `java.util.Observable` 和 `java.util.Observer` 类来实现。`Observable` 类代表被观察的对象,而 `Observer` 接口则表示观察者。以下是对这两个关键类的详细解释: 1....
Java标准库提供了`java.util.Observable`和`java.util.Observer`接口,用于实现观察者模式。 首先,我们需要创建一个`Observable`类的子类,代表我们的主题。这个类需要维护一个观察者列表,并提供添加、删除观察者...
在Java中,`java.util.Observable`和`java.util.Observer`类提供了观察者模式的内置支持。而在其他语言中,如C#、Python等,也可以轻松实现观察者模式,通过事件或委托机制。 总结来说,观察者模式是一种重要的设计...
在Java中,观察者模式通过`java.util.Observable`类和`java.util.Observer`接口来实现。`Observable`类代表被观察的对象,而`Observer`接口则表示观察者。下面我们将深入探讨这两个关键组件以及它们如何协同工作。 ...
在Java中,观察者模式的实现通常依赖于`java.util.Observable`类和`java.util.Observer`接口。`Observable`类代表被观察的对象,而`Observer`接口则是观察者的接口。以下是对这两个关键组件的详细解释: 1. `...
观察者模式是软件设计模式中的一种行为...总的来说,"java观察者模式Demo"提供了一个使用Java标准库实现观察者模式的例子,这对于学习和理解设计模式是非常有帮助的,同时通过自定义实现还能进一步深入理解其工作原理。
在Java中,观察者模式的实现主要依赖于Java的`java.util.Observable`类和`java.util.Observer`接口。`Observable`类代表被观察的对象,它可以有多个观察者;`Observer`接口则代表观察者,它们需要实现`update`方法来...
在Java中,观察者模式的实现主要依赖于`java.util.Observable`和`java.util.Observer`这两个接口。下面我们将详细探讨观察者模式的概念、工作原理以及如何在Java中实现它。 观察者模式的核心概念是“观察者”和“被...
### Java观察者模式详解 #### 一、观察者模式概述 观察者模式是一种常用的设计模式,主要用于处理对象间的一对多依赖...通过上述分析,我们可以看到Java中的观察者模式是如何实现的,以及它在实际开发中的应用价值。
在Java中,观察者模式通常通过`java.util.Observable`和`java.util.Observer`这两个接口来实现。`Observable`类代表被观察的对象,它可以添加多个观察者,并在状态变化时通知它们。而`Observer`接口则定义了观察者的...