Java Listener模式(观察者模式)例子

以下是一个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();
 }
}

// 以上程序测试通过,统一粘贴到一个包里就可以执行了

// 个人学习整理的一个例子,参考网上的开机例子写的,可供学习及无需声明免费发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值