java监听者模式代码 java监听按钮

求 JAVA 异步观察者模式 的源代码(完整的),不要同步的 , 好的给加分package TestObserver;
import java.util.Iterator;
import java.util.Vector;
/**
*
* @author Seastar
*/
interface Observed {
public void addObserver(Observer o);
public void removeObserver(Observer o);
public void update();
}
interface Observer {
public void takeAction();
}
class Invoker {
private Observer o;
Handler handler;
public Invoker(Observer o) {
new Handler();
this.o = o;
}
private class Handler extends Thread {
public Handler() {
handler = this;
}
@Override
public void run() {
o.takeAction();
}
}
public boolean TestSameObserver(Observer o) {
return o == this.o;
}
public void invoke() {
handler.start();
}
}
class ObservedObject implements Observed {
private VectorInvoker observerList = new VectorInvoker();
public void addObserver(Observer o) {
observerList.add(new Invoker(o));
}
public void removeObserver(Observer o) {
IteratorInvoker it = observerList.iterator();
while (it.hasNext()) {
Invoker i = it.next();
if (i.TestSameObserver(o)) {
observerList.remove(i);
break;
}
}
}
public void update() {
for (Invoker i : observerList) {
i.invoke();
}
}
}
class ObserverA implements Observer {
public void takeAction() {
System.out.println("I am Observer A ,state changed ,so i have to do something");
}
}
class ObserverB implements Observer {
public void takeAction() {
System.out.println("I am Observer B ,i was told to do something");
}
}
class ObserverC implements Observer {
public void takeAction() {
System.out.println("I am Observer C ,I just look ,and do nothing");
}
}
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ObserverA a = new ObserverA();
ObserverB b = new ObserverB();
ObserverC c = new ObserverC();
ObservedObject oo = new ObservedObject();
oo.addObserver(a);
oo.addObserver(b);
oo.addObserver(c);
for (int i = 0; i5; ++i) {
oo.addObserver(new Observer() {
public void takeAction() {
System.out.println("java监听者模式代码我是山寨观察者"+"java监听者模式代码,谁敢拦java监听者模式代码我");
}
});
}
//sometime oo changed ,so it calls update and informs all observer
oo.update();
}
}
观察者模式java监听者模式代码的精髓在于注册一个观察者观测可能随时变化的对象,对象变化时就会自动通知观察者,
这样在被观测对象影响范围广,可能引起多个类的行为改变时很好用,因为无需修改被观测对象的代码就可以增加被观测对象影响的类,这样的设计模式使得代码易于管理和维护,并且减少java监听者模式代码了出错几率
至于异步机制实际是个噱头 , 可以有观测对象来实现异步 , 也可以有观察者自身实现 , 这个程序实际是观测对象实现了异步机制,方法是在观察者类外包装了一层invoker类
Java 对变量监听可以啊 。。。修改你的属性get方法,增加你的监听代码段 , 或者使用AOP监听getXXX()也就是你修改属性的唯一入口方法即可
java中的事件监听是怎样实现随时监听的,是通过线程吗java中的事件监听不是通过线程实现的,它是通过一种注册--通知机制实现的 。在java的设计模式中,有一种模式叫:观察者模式,和这个类似 。
举个例子 , 本例子是一个简单的监听当数据发生变化时要做的操作:

推荐阅读