首先说说监听器:

监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执 行。 

java的事件监听机制可概括为3点:

1,java的事件监听机制涉及到事件源,事件监听器,事件对象三个组件,监听器一般是接口,用来约定调用方式 
2,当事件源对象上发生操作时,它将会调用事件监听器的一个方法,并在调用该方法时传递事件对象过去 
3,事件监听器 实现类 通常是由开发人员编写,开发人员通过事件对象拿到事件源,从而对事件源上的操作进行处理

事件监听机制在java图形用户界面那一块用的最多,我们举个awt例子:


package cn.lmj.demo;  

import java.awt.Frame;  

import java.awt.event.WindowEvent;  

import java.awt.event.WindowListener;  

public class Demo  

{  


public static void main(String[] args)  

{  

//事件源  

Frame frame = new Frame();  

frame.setSize(300,300);  

frame.setVisible(true);  

//绑定事件对象  

frame.addWindowListener(new MyListener());  

}  

}  

//监听器  

class MyListener extends WindowAdapter  

{  

//当点击了关闭按钮是触发的函数,e是事件对象,通过事件对象可以获得事件源  

@Override  

public void windowClosing(WindowEvent e)  

{  

Frame f = (Frame) e.getSource();  

f.dispose();  

}  

}


到这里,大家应该对事件监听机制有所理解。接下来我们就进入观察者模式,大家只要明白了事件监听机制,那么观察者模式就明白了,我们可以这样去理解观察者模式:

观察者模式:观察者(Observer)相当于事件监器,被观察者(Observable)相当于事件源和事件,执行事件源逻辑时通知observer触发oberver的方法调用,同时可传被观察者

举个简单示例

package cn.lmj.observer; 
 public class Demo 
 { 
 public static void main(String[] args) 
 { 
 Person p = new Person(); 
 p.registerListener(new PersonListener() 
 { 
 @Override 
 public void doRun(Even e) 
 { 
 System.out.println(e.getP() + " is running"); 
 } 
 @Override 
 public void doEat(Even e) 
 { 
 System.out.println(e.getP() + " is eatting"); 
 } 
 }); 
 p.run(); 
 p.eat(); 
 } 
 } 
 // 事件源 
 class Person 
 { 
 private PersonListener listener; 
 public void run() 
 { 
 if (listener != null) 
 { 
 listener.doRun(new Even(this)); 
 } 
 System.out.println("run........"); 
 } 
 public void eat() 
 { 
 if (listener != null) 
 { 
 listener.doEat(new Even(this)); 
 } 
 System.out.println("eat........"); 
 } 
 // 注册监听器 
 public void registerListener(PersonListener listener) 
 { 
 this.listener = listener; 
 } 
 } 
 // 监听器 
 interface PersonListener 
 { 
 public void doRun(Even e); 
 public void doEat(Even e); 
 } 
 // 事件对象 
 class Even 
 { 
 private Person p; 
 public Even() 
 { 
 super(); 
 } 
 public Even(Person p) 
 { 
 super(); 
 this.p = p; 
 } 
 public Person getP() 
 { 
 return p; 
 } 
 public void setP(Person p) 
 { 
 this.p = p; 
 } 
 }

到这里相信大家对Java的事件监听机制和观察者模式都很明白了,最后说一下事件监听机制或者观察者模式在javaee开发中的应用。这种设计模式体现在servlet的事件监听器,

在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为 ServletContext, HttpSession 和 ServletRequest 这三个域对象,Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型 

   1,监听三个域对象创建和销毁的事件监听器 
2,监听域对象中属性的增加和删除的事件监听器 
3,监听绑定到 HttpSession 域中的某个对象的状态的事件监听器。(查看API文档)