版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1、java中的监听器时啥?
监听器是一种特殊的类,当程序中执行了某项特殊的操作时会导致这个类执行一些操作,这些操作称之为事件。
2、监听器的用途
用途广泛,用于指定情况发生后的处理操作,如在线人数的统计,每一个用户登录成功都触发一次监听器对在线人数+1
3、实现
- 监听器接口
/**
*
* @ClassName: IListener
* @Description: 定义事件监听器接口,所有的事件监听器都需要实现该接口
* @Author pengdehe
* @DateTime 2019年10月25日 下午4:10:25
*/
public interface IListener {
/**
*
* @Title: doEvent
* @Description: 触发监听器后执行的操作
* @Author Administrator
* @DateTime 2019年10月25日 下午4:15:55
* @param event
*/
void doEvent(IEvent event);
}
- 事件接口
/**
*
* @ClassName: IEvent
* @Description: 定义事件接口,所以的事件源都需要实现该接口
* @Author pengdehe
* @DateTime 2019年10月25日 下午4:08:30
*/
public interface IEvent {
void setIListener(IListener listener);
}
- 实现事件接口,作为事件源
/**
*
* @ClassName: LineUpEvent
* @Description: 排队事件源
* @Author pengdehe
* @DateTime 2019年10月25日 下午4:23:03
*/
public class LineUpEvent implements IEvent {
private IListener listener;
public LineUpEvent(){
}
/**
* 绑定监听器
*/
@Override
public void setIListener(IListener listener) {
// TODO Auto-generated method stub
this.listener = listener;
}
/**
*
* @Title: eventHappened
* @Description: 事件触发
* @Author pengdehe
* @DateTime 2019年10月25日 下午4:30:27
*/
public void eventHappened() {
listener.doEvent(this);
}
}
- 测试
import java.util.LinkedList;
import pdh.listener.inter.IEvent;
import pdh.listener.inter.IListener;
import pdh.listener.inter.impl.LineUpEvent;
public class Main {
private static int SIZE = 0; //统计队列大小
public static void main(String[] args) {
LinkedList<Object> queue = new LinkedList<>();
IListener listener = new IListener() {
@Override
public void doEvent(IEvent event) {
System.out.println("执行前队列大小:" + SIZE);
System.out.println("监听器触发...");
SIZE++;
System.out.println("执行结束。。。队列大小:" + SIZE);
System.out.println("---------------------------------------");
}
};
LineUpEvent event = new LineUpEvent();
event.setIListener(listener);
for (int i = 0; i < 5; i++) {
queue.offer(new Object());
event.eventHappened();
}
}
}
- 测试结果
执行前队列大小:0
监听器触发...
执行结束。。。队列大小:1
---------------------------------------
执行前队列大小:1
监听器触发...
执行结束。。。队列大小:2
---------------------------------------
执行前队列大小:2
监听器触发...
执行结束。。。队列大小:3
---------------------------------------
执行前队列大小:3
监听器触发...
执行结束。。。队列大小:4
---------------------------------------
执行前队列大小:4
监听器触发...
执行结束。。。队列大小:5
---------------------------------------
上面简单的实现了一个排队监听器,当有排队操作时进行队伍人数的统计。
但是上面的事件触发是由我们主动去触发(注定调用event.eventHappened();
),能不能当queue自己在进行添加或删除时自定触发呢?