使用泛型的观察者模式太泛型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用泛型的观察者模式太泛型相关的知识,希望对你有一定的参考价值。
我使用Java中的泛型实现了一个简单的观察者模式。
无论如何,现在该示例仅适用于ConcreteObserver的update
方法是通过所有对象通用的.toString()
方法实现的。
在现实情况下,ConcreteObserver仅对特定类型的数据进行操作。例如,如果我的ConcreteObserver是播放器,则可以播放.mp3或.avi,但不能播放.doc。
哪个是“强制”将特定类型的数据作为观察者与可观察者之间的合同传递的正确方法?泛型太泛型了...
对于方法签名,我可以使用Interfaces >>强制执行特定的签名。
我可以强制通过哪种方式[[特定数据类型
?例如:我想要一种由以下数据组成的数据:- 字符串
- int(下一个二进制数据块的长度)
- 一个二进制数据块
- 二进制块的某种元数据描述符
- 我希望仅允许这种数据接口。
这是我使用泛型的代码。
public interface Observable<T> {
public void add(Observer<T> observer);
public void remove(Observer<T> observer);
public void sendNotify(T notification);
}
public class ConcreteObservable<T> implements Observable<T> {
ArrayList<Observer<T>> observerList = new ArrayList<>();
public void add(Observer<T> observer){
observerList.add(observer);
}
public void remove(Observer<T> observer) {
observerList.remove(observer);
}
public void sendNotify(T notification) {
for (Observer observer : observerList) {
observer.update(notification);
}
}
}
public interface Observer<T> {
public void update(T value);
}
public class ConcreteObserver<T> implements Observer<T> {
@Override
public void update(T value) {
System.out.println(value.toString());
}
}
public static void main(String[] args) {
ConcreteObservable observable = new ConcreteObservable();
ConcreteObserver observer = new ConcreteObserver();
observable.add(observer);
int value = 5;
observable.sendNotify(value);
String string = "Test";
observable.sendNotify(string);
}
我使用Java中的泛型实现了一个简单的观察者模式。无论如何,现在该示例才有效,因为ConcreteObserver的更新方法是通过.toString()方法实现的,即...
ConcreteObservable observable = new ConcreteObservable();
ConcreteObserver observer = new ConcreteObserver();
以上是关于使用泛型的观察者模式太泛型的主要内容,如果未能解决你的问题,请参考以下文章