Java觀察者模式和監聽器都是用來實現對象間的事件通知機制,可以讓多個模塊之間彼此獨立,降低耦合度。兩者雖然基本思想相似,但實現方式略有不同。
Java觀察者模式是一種設計模式,通過定義一個被觀察者對象和多個觀察者對象來實現事件的通知。被觀察者有一個集合,放置所有注冊的觀察者,當被觀察者狀態改變時,會遍歷這個集合,調用每個觀察者的update()方法來進行通知。以下是一個簡單的例子:
public class Subject { private List<Observer> observers = new ArrayList<Observer>(); public void attach(Observer observer) { observers.add(observer); } public void notifyAllObservers() { for (Observer observer : observers) { observer.update(); } } } public abstract class Observer { protected Subject subject; public abstract void update(); } public class ConcreteObserver extends Observer { public ConcreteObserver(Subject subject) { this.subject = subject; this.subject.attach(this); } public void update() { System.out.println("Subject state changed."); } } public class Main { public static void main(String[] args) { Subject subject = new Subject(); new ConcreteObserver(subject); subject.notifyAllObservers(); } }
監聽器是一種廣泛應用于界面編程的事件機制,主要用于按鈕、文本框、滾動條等控件的使用。事件源(如按鈕)會在事件觸發時調用事件監聽器(如按鈕監聽器)中的方法,該方法會在事件發生時做出響應。以下是一個簡單的例子:
public class MainFrame extends JFrame { private JButton button; public MainFrame() { button = new JButton("Click me!"); add(button); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Button clicked."); } }); } }
在使用時,觀察者模式主要用于對象間的事件通知,而監聽器主要用于界面編程的事件響應。兩者各有優缺點,需要根據實際需求進行選擇。
上一篇css固定頂部導航優點
下一篇java規定用戶名和密碼