2011-05-30 51 views
2

嗨我有一個關於使用這種模式的問題。在創建監聽器時,方法的名稱應該是模型中的方法的名稱是否觸發了事件?如:關於委內瑞拉的聽衆Event-Model模式

(顯示我的意思簡單的例子) 型號:

public void setName(String name) {...} 
public void setAge(int age) {...} 

監聽

void nameChanged(TheEventObject event); 
void ageChanged(TheEventObject event); 

或者這應該是:

void personChanged(The EventObject event); 

其中person-prefix是Model類的名稱。

回顧一下接口中的方法應該針對每一種改變模型中某個值的具體方法,還是應該只是一個說「嘿,模型改變了」?

+1

那要看是什麼'TheEventObject'包含。它有辦法確定改變了什麼嗎? – skaffman 2011-05-30 09:45:19

+0

在這個模型中,我爲每個方法都改變了模型中的某些東西。但是,如果我只有一個通用模型 - 已更改的方法,只需添加一個實例變量或指示發生了什麼變化的內容即可?這些「方法」中哪一個最常用。 – LuckyLuke 2011-05-30 09:49:07

+1

Hoi,我認爲這是一個設計決定。如果你看到「人」對象是一個複雜的來源,我會堅持personChanged(...);否則,這個人只是一個數據容器,更詳細的聽衆可能是明智的,因爲你可能根本不關心「整個人」。 ...只是我的想法^^ – Gruber 2011-05-30 09:55:56

回答

1

我認爲未來更容易創建的方式是在一些父類抽象類中創建,每個類都將被交付,您可以創建一個類的實例來管理通知類屬性更改管理器(觀察者)這會在財產變更後觸發事件。

firePropertyChange("properyName", newValue, oldValue); 

爲了支持這一點,你可以使用java.beans.PropertyChangeEvent

基本接口的屬性變化觀察:

void fireBeforePropertyChange(String propertyName, Object currentValue, Object newValue) throws PropertyChangeException; 
void removeBeforePropertyChangeListener(BeforePropertyChangeListener beforePropertyChangeListener); 
Enumeration<BeforePropertyChangeListener> getBegorePropertyChangeListeners();