我一直试图让观察员模式在相对简单的应用中发挥作用。
我有4个全球倡议课程
- StarterClass (contains a
CompositeWordLists
and aCompositeWordListData
) - CompositeWordLists (contains many
CompositeListItem
/s and aCompositeWordListData
)- CompositeListItem
- CompositeWordListData (Contains a
DialogWordData
)- DialogWordData
这里我可以观察
interface Observable<T> {
void addObserver(T o);
void removeObserver(T o);
void removeAllObservers();
void notifyObservers();
}
我正在设立这样的观察员:
public class Observers {
private Observers(){};
interface WordListsObserver {
public void update(CompositeWordLists o);
}
interface ListItemObserver {
public void update(CompositeListItem o);
}
}
基本上,我难以确定所发生的事件。 例如,<代码>CompositeWordLists 班级需要知道何时使用<代码> 《复合材料代码>被删除、保存、编辑等,但我只有一种更新的方法......我现在的脑受伤!
如何做到这一点?
UPDATE
尽管如此,我还是增加了一些事件,改变了观察和观察员,但现在我有安全问题。
public class Observers {
private Observers(){};
/**
* @param <T> the object that is passed from the Observable
*/
interface ObservableEvent<T> {
T getEventObject();
}
/**
* Get notified about Authentication Attempts
*/
interface ObserverAuthenticationAttempt {
/**
* @param e true if authentication was successful
*/
public void update(ObservableEvent<Boolean> e);
}
/**
* Get notified about a Word Deletion
*/
interface ObserverWordDeleted {
/**
* @param e the id of the word that was deleted
*/
public void update(ObservableEvent<Integer> e);
}
}
可观测 座谈现在就这样看。
interface Observable<T> {
void addObserver(T o);
void removeObserver(T o);
void removeAllObservers();
<K> void notifyObservers(Observers.ObservableEvent<K> e);
}
问题在于,当我执行时,我会而且必须将K归入适当的类别,而不是我想要做的事情。
@Override
public <K> void notifyObservers(ObservableEvent<K> e) {
for(Observers.ObserverAuthenticationAttempt o : this.observers)
o.update(e);
}
我做了什么错误?
update 2
实际上,它能更好地发挥类似的作用,但我仍然需要在两个不同地点具体说明正确的事件。
interface Observable<T,K> {
void addObserver(T o);
void removeObserver(T o);
void removeAllObservers();
void notifyObservers(Observers.ObservableEvent<K> e);
}