Ada*_*ski 41
我建议Observable完全避免使用该类,而是定义特定于事件的侦听器和相应的事件定义.然后在类中定义一个监听器列表,以及添加和删除监听器的方法,并将事件传播给它们(见下文).
Observable强制您使用它java.lang.Object来表示事件,然后检查事件类型instanceof,这是一种丑陋的非OO方法,并使代码更难理解.如果你看一下javax.swing包中的类,你会看到他们避免使用Observer/ Observable完全使用类似于下面的方法.
事件定义
public class MyChangeEvent extends EventObject {
// This event definition is stateless but you could always
// add other information here.
public MyChangeEvent(Object source) {
super(source);
}
}
Run Code Online (Sandbox Code Playgroud)
听众定义
public interface MyChangeListener {
public void changeEventReceived(MyChangeEvent evt);
}
Run Code Online (Sandbox Code Playgroud)
类定义
public class MyClass {
// Use CopyOnWriteArrayList to avoid ConcurrentModificationExceptions if a
// listener attempts to remove itself during event notification.
private final CopyOnWriteArrayList<MyChangeListener> listeners;
public class MyClass() {
this.listeners = new CopyOnWriteArrayList<MyChangeListener>();
}
public void addMyChangeListener(MyChangeListener l) {
this.listeners.add(l);
}
public void removeMyChangeListener(MyChangeListener l) {
this.listeners.remove(l);
}
// Event firing method. Called internally by other class methods.
protected void fireChangeEvent() {
MyChangeEvent evt = new MyChangeEvent(this);
for (MyChangeListener l : listeners) {
l.changeEventReceived(evt);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16393 次 |
| 最近记录: |