java.util.Observer 與 java.util.EventListener 的比較

A. Observer 在 JDK 1.0 加入,比較單純,角色只有觀察者與被觀察者
B. EventListener 在 JDK 1.1 加入,比較複雜,角色有監聽者、事件與事件來源

417812_1304583414UuPo

417812_1304586849gPUL

觀察者 (監聽者):
A. interface Observer – 有 update(Observable o, Object arg) 方法
B. interface EventListener – 沒有宣告方法,通常會自定一個 subinterface 帶有 handleEvent() 方法

被觀察者 (事件):
A. class Observable – 有實做 addObserver(Observer o) 與 notifyObservers() 方法,當被觀察者要發送訊息時需呼叫 notifyObservers()
B. class EventObject – 有一個 EventSource 成員,它是產生這個 Event 的來源,addListener(EventListener l) 與 notifyListeners() 是定義在 EventSource 物件上。例如:ClickEvent 是來自 Button,Button 才有 addClickListener() 與 click() 方法,ClickEvent 僅作為傳遞消息的中介 (mediator)。

程式範例:
A. Observer:(略)

B. EventListener:
JButton button1 = new JButton();
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
JButton jButton = (JButton) actionEvent.getSource();
int r = (int) (Math.random() * 100);
int g = (int) (Math.random() * 100);
int b = (int) (Math.random() * 100);
jButton.setBackground(new Color(r, g, b));
}
};
button1.addActionListener(actionListener);
button1.doClick();

參考文章:JAVA设计模式之Observer模式

廣告
發表留言

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: