java

位置:IT落伍者 >> java >> 浏览文章

Java Listener模式


发布日期:2019年07月09日
 
Java Listener模式

每种语言都有自己回调的方法java也不例外

Java的回调是采用多态的方式来回调比如:

interface MouseListener {

//当click方法被调用的时候代表被鼠标点击了

void click();

}

上面是一个接口里面只有一个方法先就通过一个例子展示java是如果施展多态的力量了

public class Model {

//初始化个监听器

private MouseListener[] listeners = new MouseListener[];

//用于记录当前listeners数组记录到了哪里

int index = ;

public void addListener(MouseListener listener) {

//向这个model中注册一个监听器

listeners[index++] = listener;

}

public void clickModel() {

//调用注册进来所有的listener的click方法

for (int i = ; i < index; i++) {

listeners[i]click();

}

}

//测试model

public static void main(String[] args) {

Model model = new Model();

//添加一个匿名内部类里面实现了click方法

modeladdListener(new MouseListener() {

public void click() {

Systemoutprintln(我被点击了);

}

});

//再添加一个内部类

modeladdListener(new MouseListener() {

public void click() {

Systemoutprintln(我被点击了);

}

});

//下面给model一个点击

modelclickModel();

}

}

以上是java的MVC框架下最精彩的一段代码下面是model的工作例子:

//测试model

public static void main(String[] args) {

Model model = new Model();

//添加一个匿名内部类里面实现了click方法

modeladdListener(new MouseListener() {

public void click() {

Systemoutprintln(我被点击了);

}

});

//再添加一个内部类

modeladdListener(new MouseListener() {

public void click() {

Systemoutprintln(我被点击了);

}

});

//下面给model一个点击在实际的JDK源代码中也是这样子去调用Model中的响应方法的

modelclickModel();

}

我们可以看到只点击一次model却可以输出了我被点击了的信息这也就是为什么你可以向JButtonJComboBoxJListJTable等等里面添加任意多的各种listener当然其中的奥秘仍需要各位读者自己慢慢琢磨下面是源代码:

public class Model {

//初始化个监听器

private MouseListener[] listeners = new MouseListener[];

//用于记录当前listeners数组记录到了哪里

int index = ;

public void addListener(MouseListener listener) {

//向这个model中注册一个监听器

listeners[index++] = listener;

}

public void clickModel() {

//调用注册进来所有的listener的click方法

for (int i = ; i < index; i++) {

listeners[i]click();

}

}

//测试model

public static void main(String[] args) {

Model model = new Model();

//添加一个匿名内部类里面实现了click方法

modeladdListener(new MouseListener() {

public void click() {

Systemoutprintln(我被点击了);

}

});

//再添加一个内部类

modeladdListener(new MouseListener() {

public void click() {

Systemoutprintln(我被点击了);

}

});

//下面给model一个点击

modelclickModel();

}

}

interface MouseListener {

//当click方法被调用的时候代表被鼠标点击了

void click();

}

               

上一篇:Java开发的WebService获取客户端IP地址

下一篇:Java性能的优化(上)