Manually implement a listener listens team out of the queue (a)

Disclaimer: This article is a blogger original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement.
This link: https://blog.csdn.net/HardToFindName/article/details/102746655

1, what the listener when java?

监听器是一种特殊的类,当程序中执行了某项特殊的操作时会导致这个类执行一些操作,这些操作称之为事件。

2, the listener uses

用途广泛,用于指定情况发生后的处理操作,如在线人数的统计,每一个用户登录成功都触发一次监听器对在线人数+1

3, to achieve

  • Listener interface
/**
 * 
 * @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);
}
  • Event interface
/**
 * 
 * @ClassName: IEvent
 * @Description: 定义事件接口,所以的事件源都需要实现该接口
 * @Author pengdehe
 * @DateTime 2019年10月25日 下午4:08:30
 */
public interface IEvent {
	void setIListener(IListener listener);
}

  • Implement the event interface, as the event source
/**
 * 
 * @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);
	}
}
  • test
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();
		}
		
	}
}
  • Test Results
执行前队列大小:0
监听器触发...
执行结束。。。队列大小:1
---------------------------------------
执行前队列大小:1
监听器触发...
执行结束。。。队列大小:2
---------------------------------------
执行前队列大小:2
监听器触发...
执行结束。。。队列大小:3
---------------------------------------
执行前队列大小:3
监听器触发...
执行结束。。。队列大小:4
---------------------------------------
执行前队列大小:4
监听器触发...
执行结束。。。队列大小:5
---------------------------------------

The above simple realization of a queue listener, a number of team statistics when there are queued operation.

But the above events are triggered by our initiative to trigger (doomed call event.eventHappened();), when the queue can customize the trigger when carrying out their own add or remove it?

Guess you like

Origin blog.csdn.net/HardToFindName/article/details/102746655