手动实现一个监听器,监听队列的出入队(一)

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自己在进行添加或删除时自定触发呢?

你可能感兴趣的:(手动实现)