天天看點

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監聽者模式