java监听机制_详解java的事件监听机制和观察者设计模式

首先说说监听器:

监听器就是一个实现特定接口的普通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文档)

最后写一个servlet的监听器监听当前网站的在线用户量,这个值不是很准确

package cn.lmj.web.listener.exapmle;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

public class CountNumListener implements HttpSessionListener

{

//当session创建时调用该方法

public void sessionCreated(HttpSessionEvent se)

//将在线用户数量的值保持到ServletContext中,已便所有用户看到

ServletContext context = se.getSession().getServletContext();

//第一次获取没有

if(count==null)

{

count = 1;

context.setAttribute("count", count);

}

else

{

count++;

context.setAttribute("count", count);

}

}

//session销毁的时候调用该方法,把存在ServletContext中的数量值减一

public void sessionDestroyed(HttpSessionEvent se)

{

ServletContext context = se.getSession().getServletContext();

Integer count = (Integer) context.getAttribute("count");

count--;

context.setAttribute("count", count);

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值