首页 > 代码库 > 监听器和 利 用观察者设计模式设计一个程序
监听器和 利 用观察者设计模式设计一个程序
一、监听器概念
1、事件源:发生事件的对象。
2、监听器:是一个接口,监听事件源上要发生的动作
3、事件:事件对象一般是作为监听器方法的参数存在的,它封装了发生事件的对象
二、Servlet中提供的监听器(8个)
八个监听器分类:
2.1监听ServletContext、HttpSession、ServletRequest对象的创建和销毁的监听器。
ServletContextListener:监听ServletContext对象的创建和销毁。
HttpSessionListener:监听HttpSession对象的创建和销毁。
创建:第一次调用request.getSession()时。
销毁:1、主动调用invalidate()方法
2、超时
ServletRequestListener:监听ServletRequest对象的创建和销毁。
2.2监听ServletContext、HttpSession、ServletRequest对象中域变化(新来的,替换的,删除的)的监听器。
ServletContextAttributeListener:
HttpSessionAttributeListener:
ServletRequestAttributeListener:
2.3感知型监听器:谁实现了这些接口,谁就能感知自己被怎么着了。这种监听器不需要注册。
HttpSessionActivationListener:感知自己何时随着HttpSession对象钝化和活化
HttpSessionBindingListener:感知自己何时被HttpSession对象绑了(绑在域中)和解绑了。
编写步骤:
1、编写一个类实现某个监听器接口
2、在web.xml中注册监听器
<listener>
<listener-class>cn.usst.listener.ServletContextDemoListener</listener-class>
测试用例:
1、事件源:发生事件的对象。
2、监听器:是一个接口,监听事件源上要发生的动作
3、事件:事件对象一般是作为监听器方法的参数存在的,它封装了发生事件的对象
二、Servlet中提供的监听器(8个)
八个监听器分类:
2.1监听ServletContext、HttpSession、ServletRequest对象的创建和销毁的监听器。
ServletContextListener:监听ServletContext对象的创建和销毁。
HttpSessionListener:监听HttpSession对象的创建和销毁。
创建:第一次调用request.getSession()时。
销毁:1、主动调用invalidate()方法
2、超时
ServletRequestListener:监听ServletRequest对象的创建和销毁。
2.2监听ServletContext、HttpSession、ServletRequest对象中域变化(新来的,替换的,删除的)的监听器。
ServletContextAttributeListener:
HttpSessionAttributeListener:
ServletRequestAttributeListener:
2.3感知型监听器:谁实现了这些接口,谁就能感知自己被怎么着了。这种监听器不需要注册。
HttpSessionActivationListener:感知自己何时随着HttpSession对象钝化和活化
HttpSessionBindingListener:感知自己何时被HttpSession对象绑了(绑在域中)和解绑了。
编写步骤:
1、编写一个类实现某个监听器接口
2、在web.xml中注册监听器
<listener>
<listener-class>cn.usst.listener.ServletContextDemoListener</listener-class>
</listener>
三、观察者设计模式设计一个程序
//事件源 public class Student implements Serializable{ private String name; private StudentListener listener; public Student(String name){//注入:通过构造方法 this.name = name; } public String getName() { return name; } public void eat(){ if(listener!=null){ listener.preEat(new StudentEvent(this)); } System.out.println("开始吃"); } public void study(){ if(listener!=null){ listener.preStudy(new StudentEvent(this)); } System.out.println("开始学"); } }
public class StudentEvent { private Object source; public StudentEvent(Object source){ this.source = source; } public Object getSource() {//获取事件源 return source; } }
public interface StudentListener { void preEat(StudentEvent e);//监听吃 void preStudy(StudentEvent e);//监听学 }
测试用例:
public static void main(String[] args) { Student s = new Student("葛付以"); //注册监听器 s.addStudentListener(new StudentListener() { public void preStudy(StudentEvent e) { Student ss = (Student) e.getSource(); System.out.println(ss.getName()+"喝杯奶吧"); } public void preEat(StudentEvent e) { Student ss = (Student) e.getSource(); System.out.println(ss.getName()+"慢慢吃"); } }); s.eat(); s.study(); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。