天天看點

監聽器模式

javaWeb中的Listener中涉及到了監聽器模式,是以回來補充一下

1. 監聽器模式(Listener Pattern)

監聽器模式用來監聽某個對象發生的事件,當此對象發生被監聽的事件後,監聽器的某個方法将被執行,其主要組成有: 事件源,事件監聽器,事件對象

2. 流程

監聽器模式很簡單,直接看代碼就能了解,這裡舉例監聽小狗的玩和學習事件

2.1 事件對象

public class Event {

	// 存放事件源的引用
	Object object;

	public Event(Object object) {
		super();
		this.object = object;
	}

	public Object getObject() {
		return object;
	}
	
}

           

2.2 事件監聽器

狗的監聽器接口

public interface DogListener {
	
	public void playListener(Event event);
	
	public void studyListener(Event event);

}
           

狗監聽器的實作類

package listenerpatten;

public class MyDogListener implements DogListener {

	@Override
	public void playListener(Event event) {
		System.out.println("監聽器:監聽到" +  event.getObject().getClass().getName() + "在玩");
	}

	@Override
	public void studyListener(Event event) {
		System.out.println("監聽器:監聽到" +  event.getObject().getClass().getName() + "在學習");
	}

}

           

2.3 事件源

public class Dog {
	
	private MyDogListener myDogListener;
	public void setDogListener(MyDogListener myDogListener) {
		this.myDogListener = myDogListener;
	}

	public void play(){
		System.out.println("Dog: i am playing");
		Event event = new Event(this);
		myDogListener.playListener(event);
	}

	public void study(){
		System.out.println("Dog: i am studying");
		Event event = new Event(this);
		myDogListener.studyListener(event);
	}
}
           

2.4 測試類

public class test {
	
	public static void main(String[] args) {
		
		Dog dog = new Dog();
		MyDogListener myDogListener = new MyDogListener();
		dog.setDogListener(myDogListener);
		
		dog.play();
		dog.study();
		
	}
}
           
Dog: i am playing
監聽器:監聽到listenerpatten.Dog在玩
Dog: i am studying
監聽器:監聽到listenerpatten.Dog在學習