java.util.Observer
和 java.util.Observable
很难看。它们需要使类型安全爱好者感到不舒服的类型转换,并且如果没有丑陋的转换,您无法将一个类定义为包含多个事物的 Observer
。事实上,在“How do I know the generic object that the Observer class sends in Java?”中,an answerer says每个观察者/可观察者中只能使用一种类型的数据。
我正在尝试在 Java 中创建一个通用版本的观察者模式来解决这两个问题。这与前面提到的帖子中的问题没有什么不同,但该问题并未得到明显解决(最后一条评论是 OP 未回答的问题)。
最佳答案
Observer.java
package util;
public interface Observer<ObservedType> {
public void update(Observable<ObservedType> object, ObservedType data);
}
Observable.java
package util;
import java.util.LinkedList;
import java.util.List;
public class Observable<ObservedType> {
private List<Observer<ObservedType>> _observers =
new LinkedList<Observer<ObservedType>>();
public void addObserver(Observer<ObservedType> obs) {
if (obs == null) {
throw new IllegalArgumentException("Tried
to add a null observer");
}
if (_observers.contains(obs)) {
return;
}
_observers.add(obs);
}
public void notifyObservers(ObservedType data) {
for (Observer<ObservedType> obs : _observers) {
obs.update(this, data);
}
}
}
希望这对某人有用。
关于java - Java 中的通用观察者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13362636/