java监听者模式代码 java监听按钮( 二 )


1,我们先定义一个接口,可以让多个监听者实现
2、实现一监听者
3、被监听者
4、main方法里面是监听的应用 。这样就可以监听DataManager中的updateData行为了,当有数据发生变化时,就可以即时被监听者收到 。
java 自定义事件的触发及监听JAVA事件响应机制
1java监听者模式代码,先自定义一个事件
public class MyEvent extends java.util.EventObject{
【java监听者模式代码 java监听按钮】public MyEvent(Object source)
{
super(source);
}
}
2java监听者模式代码,再自定义一个监听器
public class MyListener implements java.util.EventListener{
//这里是当事件发生后java监听者模式代码的响应过程
public void EventActivated(MyEvent me)
{
System.out.println("事件已经被触发");
}
}
3,以下这个类为触发事件java监听者模式代码的事件源
public class MyObject {
private Vector vectorListeners=new Vector();
public synchronized void addMyListener(MyListener ml)
{
vectorListeners.addElement(ml);
}
public synchronized void removeMyListener(MyListener ml)
{
vectorListeners.removeElement(ml);
}
protected void activateMyEvent()
{
Vector tempVector=null;
MyEvent e=new MyEvent(this);
synchronized(this)
{
tempVector=(Vector)vectorListeners.clone();
for(int i=0;itempVector.size();i++)
{
MyListener ml=(MyListener)tempVector.elementAt(i);
ml.EventActivated(e);
}
}
}
//定义一个公用方法用于触发事件
public void test()
{
activateMyEvent();
}
}
4,测试类
public class Test {
public static void main(String[] args)
{
MyObject mo=new MyObject();
//注册该事件
mo.addMyListener(new MyListener());
//触发该事件
mo.test();
}
}
java设计模式-回调、事件监听器、观察者模式转自()
背景
关于设计模式 , 之前笔者写过工厂模式 , 最近在使用gava ListenableFuture时发现事件监听模型特别有意思,于是就把事件监听、观察者之间比较了一番,发现这是一个非常重要的设计模式,在很多框架里扮演关键的作用 。
回调函数
为什么首先会讲回调函数呢?因为这个是理解监听器、观察者模式的关键 。
什么是回调函数
所谓的回调 , 用于回调的函数 。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数 。有这么一句通俗的定义:就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序 。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法 。
举个例子:
这里有两个实体:回调抽象接口、回调者(即程序a)
回调接口(ICallBack )
public interface ICallBack {
public void callBack();
}
回调者(用于调用回调函数的类)
public class Caller {
}
回调测试:
public static void main(String[] args) {
Caller call = new Caller();
call.call(new ICallBack(){
控制台输出:
start...
终于回调成功了!
end...
还有一种写法
或实现这个ICallBack接口类
class CallBackC implements ICallBack{
@Override
public void callBack() {
System.out.println("终于回调成功了!");
}
}
有没有发现这个模型和执行一个线程,Thread很像 。没错 , Thread就是回调者 , Runnable就是一个回调接口 。
new Thread(new Runnable(){

推荐阅读