以下是一个Listener模式(观察者模式)的例子,自己写的一个打卡机的模拟监听器
任何模式都是从现实世界抽像总结出来的,程序要做的,就是把这些抽象出来的应用到具体的环境中。
个人认为这样的模式例子,很有用,于是总结了下下,,,,
// ----------------------模拟公交车上的打卡机打卡-------------CardMachine.java
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 打卡机器
*
* @author JiangWenLei
*
*/
public class CardMachine {
// 一组可扩展的监听接口
private List<EventPunchCardListener> listener = new ArrayList<EventPunchCardListener>();
// 添加监听接口
public void addPunchListener(EventPunchCardListener clickOnListener) {
this.listener.add(clickOnListener);
}
/**
* 打卡 ing
*/
public void punchCard() {
for (EventPunchCardListener punch : listener) {
EventPunchCard eventPunch = new EventPunchCard(new Date(), this);
punch.performPunch(eventPunch);
}
}
/**
* 测试打卡机器运转
*
* @param args
*/
public static void main(String[] args) {
CardMachine machine = new CardMachine();
Screen screen = new Screen();
Speaker speaker = new Speaker();
machine.addPunchListener(screen);
machine.addPunchListener(speaker);
machine.punchCard();
}
}
//---------------------------定义打卡这个事件-----------------------EventPunchCard.java
import java.util.Date;
/**
* 打卡事件<BR>
* 在什么时间,由XX触发打卡这个操作(事件)
*
* @author JiangWenLei
*
*/
public class EventPunchCard {
private Object person; // 事件的来源,表示事件是由XX触发的
private Date time; // 记录事件发生的时间
public EventPunchCard(Date time, Object person) {
this.person = person;
this.time = time;
}
public Object getSource() {
return person;
}
public void setSource(Object person) {
this.person = person;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
}
// ----------------------------展现状态的接口-----------------------EventPunchCardListener.java
/**
* 监听接口:监听打开的一系列状态的接口
*
* @author JiangWenLei
*
*/
public interface EventPunchCardListener {
public void performPunch(EventPunchCard punch);
}
// ----------------------------------展现的一个状态实现:显示--------------------------Screen.java
/**
* 打卡机的显示屏<BR>
* 用于显示打卡后的状态
*
* @author JiangWenLei
*
*/
public class Screen implements EventPunchCardListener {
/**
* 显示余额
*/
public void performPunch(EventPunchCard punch) {
System.out.print(punch.getTime() + " ");
System.out.println("您的余额为XX !");
}
}
// ------------------------------展现的一个状态实现:声音------------------------------Speaker.java
/**
* 打卡机的扬声器<BR>
* 用于提醒打卡后的状态
*
* @author JiangWenLei
*
*/
public class Speaker implements EventPunchCardListener {
/**
* 声音提醒
*/
public void performPunch(EventPunchCard punch) {
System.out.print(punch.getTime());
java.awt.Toolkit.getDefaultToolkit().beep();
}
}
// 以上程序测试通过,统一粘贴到一个包里就可以执行了
// 个人学习整理的一个例子,参考网上的开机例子写的,可供学习及无需声明免费发布
分享到:
相关推荐
Java 观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者...
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...
java实现观察者设计模式,利用ApplicationListener和ApplicationEvent。Test包里有测试代码
观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。...
java内置的观察者模式,用于日后复习查阅。
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...
观察者设计模式观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者<Source/Listener>模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它...
观察者(Observer)和被观察者(Listener)也是这种关系,Observer将自己attach到Listener中,当Listener触发时Notify所有Observer. 作用 在观察者模式中,被观察者维护观察者对象的集合,当被观察者对象变化时,它...
1. 发布订阅/观察者模型,实现业务之间的解耦。 2.比如新增用户完成需要发短信、记录日志等,这些逻辑堆在新增方法的最后面实在不太合理,而且不易复用。 3.对解耦代码有很大的帮助,比如多种业务场景做完都要插入...
我们在编写JSP/Servle程序时,有相应的事件处理机制,在JSP/Servlet中是在web.xml中注册Listener,由Container在特定事件发生时呼叫特定的实现Listener的类。
java jsp listener小用法,记录登录次数。
JAVALISTENER监听器教程及实例借鉴.pdf
servlet--listener 各种接口的简单例子 ,将每个接口的实现都简单的举例,特别容易学会,下载后直接 放到工作空间后运行
内容:中介者模式、观察者模式/监听者模式实现,用来消息发送和消息处理的解耦,以单播和多播形式同步或异步的模式发布消息,创建和帧听事件。 能学到:ApplicationContext、ApplicationEvent、ApplicationListener...
又称为发布-订阅(Publish-Subscribe)模式、模型-视图(Model-View)模式、源-监听(Source-Listener)模式、或从属者(Dependents)模式 二、观察者模式结构图 三、观察者模式中主要角色 抽象主题(Subject)...
三个有关监听者的实例,一定要理解透哦。 如果工作两年,还没开始学设计模式,说明你out了哦
监听实例 记录 远程登录监听实例 记录 远程登录监听实例 记录 远程登录
这是一个显示所有用户及用户个数的监听小项目。MyEclipse直接运行
怎么给JAVA画布设置鼠标键盘Listener 有完整的JAVA程序,直接导入Eclipse即可. 也演示了怎么在画布上用OpenGL画图。 使用了jogl