java监听器
来源:互联网 发布:淘宝优惠群公告怎么写 编辑:程序博客网 时间:2024/09/21 09:28
最近有在接触关于java监听器的内容,整合了一些资料,整理如下。
首先,什么是监听器?
直观的说,监听器,即使java中的一种interface的实现。能对某个动作进行反应,比如你按下一个按钮、滑动一个页面、选择一个复选框等。
以上这些动作都产生一个事件,那么,对当前对象进行监听的监听器就会被通知某对象执行了一个动作。
下面举个例子:
比如你奶奶正在烤面包。你不知道面包何时出炉,所以你每两分钟就给你奶奶打个电话确认一下,因为你很饿,想一出炉就吃上美味的面包。可能你手头还有其他的事情要做。那么每两分钟就打个电话无疑很浪费你的时间和精力。这么看,这并非是一种好的策略。更好的办法是,你给你奶奶一个指示(实现一个监听器),让她面包一出炉就给你打个电话。很明显,烤面包的奶奶当然能知道自己面包什么时候能够出炉。她只要在面包出炉的时候给你一个电话就OK了,都不浪费任何人的时间和精力花在面包是否出炉这件事上。
那么,下面我们来用代码实现:
接口:GrannyListener
public interface GrannyListener {public void prepareToCook(CookieEvent e);//准备public void cooking(); // 烤面包中public void cookiesBaked(CookieEvent e); // 烤完}
这是一个具体实现该接口的监听类:MyGrannyListener
public class MyGrannyListener implements GrannyListener{@Overridepublic void prepareToCook(CookieEvent e) {// TODO Auto-generated method stubSystem.out.println("Granny is prepared to cook at "+ e.getDate());}@Overridepublic void cooking() {// TODO Auto-generated method stubSystem.out.println("Granny is cooking ...");}@Overridepublic void cookiesBaked(CookieEvent e) {// TODO Auto-generated method stubint amount = e.getAmount();System.out.println("Granny said that she produced " + amount+ " " + (amount > 1 ? "cookies" : "cookie") + " at "+ e.getDate());}}
事件类,主要是记录时间的。CookieEvent
public class CookieEvent {private Integer amount; private Date date; public CookieEvent(Integer amount){ this.date = new Date(); this.amount = amount; } public Integer getAmount(){ return amount; } public Date getDate(){ return date; }}
下面是实体类:Grandmother
public class Grandmother{ // GRANNY STUFF private final int SLEEPTIME = 1000; private final int MAX_COOKIES = 25; private CookieEvent cookieEvent; //LISTENER STUFF private GrannyListener grannyListener; public void cook(){ int cookies = (int)(Math.random()*MAX_COOKIES-1)+1; // prepare cookieEvent = new CookieEvent(cookies); grannyListener.prepareToCook(cookieEvent); // cooking try { grannyListener.cooking(); Thread.sleep((int)(cookies*SLEEPTIME)); } catch (InterruptedException e) { } // done cookieEvent = new CookieEvent(cookies); grannyListener.cookiesBaked(cookieEvent); } public void addGrannyListener(GrannyListener listener){ this.grannyListener = listener; } }最后,我们来写个Demo类验证一下:
public class Demo {final static Grandmother granny = new Grandmother();public static void main(String[] args) {MyGrannyListener mgGrannyListenter1 = new MyGrannyListener();granny.addGrannyListener(mgGrannyListenter1);granny.cook();}}
Granny is prepared to cook at Mon May 25 21:08:44 CST 2015Granny is cooking ...Granny said that she produced 6 cookies at Mon May 25 21:08:50 CST 2015
下面我们来画张类图说明一下:
就如上图所画的,细心的同学其实已经发现,监听器的核心部分其实就是回调函数的使用。
http://blog.csdn.net/lin00kun11/article/details/45846907
本人写的该篇文章也对回调函数做了粗浅的介绍。
我认为要实现一个监听器,包括下面几个条件。
1.你必须得先有一个实体类,本例中,Grandmother类即是一个这样的类
2.你必须得有一个监听器的实现类,本例中,MyGrannyListener类就实现了接口GrannyListener。或许以后,当奶奶不是烤面包,而是烤红薯的时候
你还可以实现另外一个监听类来监听奶奶烤红薯的过程。
3.在Grandmother实体类中,要绑定监听器。我们在此处绑定的是接口GrannyListener,这么做的好处是,如果将来奶奶烤红薯的时候,我们不需要
改Grandmother类,只需要实现一个新的监听器,然后在实例化的时候往Grandmother中传新的监听器就可以了。
4.最后一个步骤当然是你在奶奶烤面包的方法中,要通知监听器了。监听器是死的,奶奶是活的,奶奶自己做了什么事情,做到哪一步了,要告诉监听器。
以上的几个步骤就实现了一个监听器的基本编写。
才疏学浅,有什么不足的地方,请大家指出。
- java 监听器
- java监听器
- java监听器
- Java 监听器
- JAVA监听器
- java监听器
- Java监听器
- java 监听器
- java监听器
- java 监听器
- java 监听器
- java监听器
- java 监听器
- Java监听器
- java监听器
- Java监听器
- 监听器---java
- Java 监听器
- Struts2的Action接受参数的方法介绍
- openwrt 编译命令记录
- arm-linux-gdb调试工具的安装与交叉编译gdbserver
- Matlab函数速查
- android线程池
- java监听器
- 2014 Benelux Algorithm Programming Contest (BAPC 14) 部分题解
- 神经网络与机器学习笔记——K-均值聚类
- 递归算法详解
- IDF实验室:百密一疏--孔子的学费
- Matlab与c语言混合编程接口方法
- android 多线程 - 线程池 Executors.newFixedThreadPool 的使用例子
- iTOP4412裸机开发——LED
- Android平台下基于XMPP的IM研究