天天看点

java监听者模式

原理:当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。

Java的时间监听机制涉及到三个组件:事件源、事件监听器、事件对象

当事件源上发生操作时,它会调用事件监听器的一个方法,并且调用这个方法时,会传递事件对象过来

事件监听器是由开发人员编写,开发人员在事件监听器中,通过事件对象可以拿到事件源,从而对事件源上的操作进行处理

下面以按钮点击时间来写代码实现监听按钮被点击。

首先创建按钮监听接口

/**
 * 监听按钮被点击接口 需要将按钮所属的对象传给监听接口
 * @author wq
 *
 */
public interface ButtonListener {

	public void listenerButtonClick(ButtonObject buttonObject);
}
           

下面创建事件对象

/**
 * 事件对象也就是按钮对象ButtonObject
 * @author wq
 *
 */
public class ButtonObject {
	private String buttoNname = null;
	public ButtonObject(String buttoNname){
		this.buttoNname = buttoNname;
	}
	public String getButtonName(){
		return buttoNname;
	}
	/**
	 * 按钮被点击的方法
	 */
	public void clickButton(){
		System.out.println(buttoNname+"被点击了一下");
	}
}
           

下面是事件源代码

其中buttonListenerList是用来存放按钮监听对象,按钮监听对象都是实现了ButtonListener接口中的listenerButtonClick(监听按钮点击)方法。代码运行思路就是,创建监听源然后把实现监听接口的监听类add至监听源中的list里面,注意实现监听接口的类实现的listenerButtonClick监听方法中接收的对象是事件对象也就是ButtonObject,然后在listenerButtonClick方法中调用的正是事件对象ButtonObject的clickButton点击方法,

/**
 * 事件源
 * @author wq
 *
 */
public class ButtonSource {
	private Vector<ButtonListener> buttonListenerList = new Vector<ButtonListener>();
	
	public void addButtonListener(ButtonListener buttonListener){
		buttonListenerList.add(buttonListener);
	}
	
	//接收外部按钮对象
	public void notifyListenerEvents(ButtonObject buttonObject){
		for (ButtonListener buttonListener : buttonListenerList) {
			buttonListener.listenerButtonClick(buttonObject);
		}
	}
	
	public void doubleClick(){
		this.notifyListenerEvents(new ButtonObject("双击事件按钮"));
	}
	
	public void singleClick(){
		this.notifyListenerEvents(new ButtonObject("单机事件按钮"));
	}
	
	
	public static void main(String[] args) {
		ButtonSource buttonSource = new ButtonSource();
		buttonSource.addButtonListener(new ButtonListener() {
			public void listenerButtonClick(ButtonObject buttonObject) {
				String buttonName = buttonObject.getButtonName();
				if(buttonName.equals("双击事件按钮")){
					System.out.println(buttonObject.getButtonName()+"我擦按钮要被点击了 而且是双击");
					buttonObject.clickButton();
					System.out.println(buttonObject.getButtonName()+"我擦按钮已经被点击了 而且是双击");
				}else{
					System.out.println(buttonObject.getButtonName()+"我擦按钮要被点击了");
					buttonObject.clickButton();
					System.out.println(buttonObject.getButtonName()+"我擦按钮已经被点击了");
				}
				
			}
		});
		buttonSource.notifyListenerEvents(new ButtonObject("button1"));
		buttonSource.doubleClick();
		buttonSource.singleClick();
	}
}
           

运行效果

java监听者模式