java中的监听回调机制说到底是一种观察者设计模式,通过向被监听者对象内部注册一个监听器接口对象,在被监听者的事件函数中调用监听器的回调方法,这样在客户端代码触发被监听者的事件函数时,执行回调方法。
//监听器接口
interface ClickListenner{
//回调方法
void onclick();
}
class MyButton{
private ClickListenner listenner =null ;
//注册监听器
public void setListenner(ClickListenner listenner){
this.listenner = listenner;
}
//触发函数(业务方法体)
public void click() throws Exception{
int i=1;
System.out.println("写自己的业务逻辑"); //可以写上自己业务处理逻辑
if(i==2) //如果业务逻辑执行出错,则抛出异常,这样可以控制回调函数的执行
throw new Exception("自定义业务出错");
listenner.onclick();
}
}
public class ListennerDemon {
public static void main(String[] args) throws Exception {
MyButton button = new MyButton();
button.setListenner(new ClickListenner() { //向按钮注册监听器
@Override
public void onclick() { //实现自己的回调方法体
// TODO Auto-generated method stub
System.out.println("已点击按钮");
}
});
button.click(); //触发
}
}
下面贴上一段观察者模式设计代码
class Target {
List<Observe> observers = new ArrayList<Observe>();
private int status;
public void addObserver(Observer observer){
observers.add(observer);
}
public void setStatus(int status){
this.status = status;
for(Observe observer : observers){
observer.change();
}
}
}
interface Observe{
void observer(Target target);
void change();
}
class Observer implements Observe{
private String observerName;
public Observer(String observename) {
// TODO Auto-generated constructor stub
this.observerName = observename;
}
public void observer(Target target){
target.addObserver(this);
}
public void change(){
System.out.println(observerName+"观察者检测到目标发生变化");
}
}
public class ObserverDemon {
public static void main(String[] args) {
Target target = new Target();
Observer observer1 = new Observer("observer1");
Observer observer2 = new Observer("observer2");
Observer observer3 = new Observer("observer3");
Observer observer4 = new Observer("observer4");
target.addObserver(observer1);
target.addObserver(observer2);
target.addObserver(observer3);
target.addObserver(observer4);
target.setStatus(1);
}
}