测试公交车的打卡机样例:
CardMachine
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
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
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
/**
* 监听接口:监听打开的一系列状态的接口
*
* @author JiangWenLei
*
*/
public interface EventPunchCardListener {
public void performPunch(EventPunchCard punch);
}
Screen
/**
* 打卡机的显示屏<BR>
* 用于显示打卡后的状态
*
* @author JiangWenLei
*
*/
public class Screen implements EventPunchCardListener {
/**
* 显示余额
*/
public void performPunch(EventPunchCard punch) {
System.out.print(punch.getTime() + " ");
System.out.println("您的余额为51 !");
}
}
Speaker
/**
* 打卡机的扬声器<BR>
* 用于提醒打卡后的状态
*
* @author JiangWenLei
*
*/
public class Speaker implements EventPunchCardListener {
/**
* 声音提醒
*/
public void performPunch(EventPunchCard punch) {
System.out.print(punch.getTime());
java.awt.Toolkit.getDefaultToolkit().beep();
}
}