📄 model.java
字号:
package chapter7.event;
import java.util.*;
/*接着定义事件源类*/
public abstract class Model {
private Vector listeners = new Vector(); //定义了一个储存事件监听者的数组
/*把监听者注册入listeners数组中*/
public synchronized void addModelChangedListener(ModelChangedListener mcl) {
listeners.addElement(mcl);
}
/*把监听者从listeners中注销*/
public synchronized void removeModelChangedListener(ModelChangedListener
mcl) {
listeners.removeElement(mcl);
}
/*以上两个方法的前面均冠以synchronized,是因为运行在多线程环境时,可能有几个对象同时要进行注册和注销操作,使用synchronized来确保它们之间的同步。开发工具或程序员使用这两个方法建立源与监听者之间的事件流*/
/*事件源使用本方法通知监听者发生了modelChanged事件*/
protected void notifyModelChanged() {
Vector l;
EventObject e = new EventObject(this);
/* 首先要把监听者拷贝到l数组中,冻结EventListeners的状态以传递事件。这样来确保在事件传递到所有监听者之前,已接收了事件的目标监听者的对应方法暂不生效*/
synchronized (this) {
l = (Vector) listeners.clone();
}
for (int i = 0; i < l.size(); i++) {
/* 依次通知注册在监听者队列中的每个监听者发生了modelChanged事件,
并把事件状态对象e作为参数传递给监听者队列中的每个监听者*/
((ModelChangedListener) l.elementAt(i)).modelChanged(e);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -