我目前有一個Java Observer/Observable設置,其中我在Observer.update的Object參數(例如事件ID)內切換某個字段以確定如何處理Observable通知。觀察者設計 - 如何訪問method.invoke範圍?
這將創建像冗長的代碼:
public void update (Observable o, Object arg) {
if (arg instanceof Event) {
switch (((Event)arg).getID()) {
case EVENT_TYPE_A:
// do stuff...
break;
case EVENT_TYPE_B:
// do stuff...
break;
case EVENT_TYPE_C:
// do stuff...
break;
}
}
}
從ActionScript背景的人,這種感覺不必要的冗長,我...強似觀察者的情況下,我寧願傳遞一個回調方法由Observable直接調用(更具體地說,由一個子類)。然而,我不清楚如何確定方法應該被調用的對象(「擁有」該方法的類實例)。
我可以傳遞一個引用到封裝該方法的實例,但是這味道就像糟糕的OOP。
我吠叫錯了樹嗎?還是有一個乾淨的方式來實現這一目標?
我看到你的困境;這不是觀察者模式。見http://stackoverflow.com/questions/5423125/polymorphism-and-interfaces-in-java-can-polymorphism-be-used-to-implement-interf/5423860#5423860 – 2011-04-02 01:22:15