自己编写一个Java监听器

发表于:2016-7-04 09:58

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:我爱毛主席    来源:51Testing软件测试网采编

  1.原理:
  当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。
  例如:创建一个“人”类Class Person
  人拥有吃的方法public void eat(){},我们的目的就是,在这个人吃之前要提醒他洗手,所以我们就要监听这个人,不管他在什么时候吃,我们都要能够监听到并且提醒他洗手,通俗点讲这个就是监听器的作用(在吃之前提醒他洗手)。
  2.组成:
  2.1Java的时间监听机制涉及到三个组件:事件源、事件监听器、事件对象
  2.2当事件源上发生操作时,它会调用事件监听器的一个方法,并且调用这个方法时,会传递事件对象过来
  2.3事件监听器是由开发人员编写,开发人员在事件监听器中,通过事件对象可以拿到事件源,从而对事件源上的操作进行处理
  3.实现:
  3.1创建一个人类,人具有跑、吃的方法  (创建一个事件源)
  3.2创建一个接口用来监视人的跑、吃   (事件监听器)
  3.3创建一个事件对象,里面用来封装人(Person)这个对象  (事件对象)
  3.4创建一个测试类,用来测试Java监听机制
  4.源码下载:http://pan.baidu.com/s/1kUOOoV9
  首先创建事件源
//事件源
public class Person {
//1.1首先定义一个私有的、空的监听器对象,用来接收传递进来的事件监听器(相当于一个全局变量)
private PersonListener listener;
//1.2将传递进来的事件监听器付给1.1中的listener
public void registerListener(PersonListener personListener){
this.listener=personListener;
}
//1.3判断listener是否为null,如果不为空,则执行监听器中的方法,否则照常调用
public void run(){
if(listener!=null){
Even even=new Even(this);
this.listener.dorun(even);
}
System.out.println("人具有跑的方法");
}
//1.4和1.3一个道理
public void eat(){
if(listener!=null){
Even even=new Even(this);
this.listener.doeat(even);
}
System.out.println("人具有吃的方法");
}
}
  创建事件监听器
//事件监听器
interface PersonListener{
public void dorun(Even even);
public void doeat(Even even);
}
  创建事件对象
//事件对象
class Even{
private Person person;
public Even(Person person) {
super();
this.person = person;
}
public Even() {
super();
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
*到这步我们已经把一个完整的Java监听器做完,下一步我们做测试
注意:要实现监听,必须调用它所对应的方法例如下面的registerListener,而且必须要实现监听器接口PersonListener
public class TestListener {
public static void main(String[] args) {
Person person=new Person();
person.registerListener(new MyPersonListener());
person.run();
person.eat();
}
}
//实现监听器接口中的方法
class MyPersonListener implements PersonListener{
@Override
public void dorun(Even even) {
System.out.println("人在跑之前执行的动作");
}
@Override
public void doeat(Even even) {
System.out.println("人在吃之前执行的动作");
}
}
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号