Observer パターンは、オブジェクトがイベント通知をサブスクライブし、イベントが発生したときに自動的に応答できるようにする設計パターンです。 Java では、通常、Observable (Subject) および Observer (Observer) インターフェイスを使用して実装されます。サブジェクトはオブザーバーのコレクションを維持し、変更が発生したときにオブザーバーに通知します。 Observer パターンには、疎結合、スケーラビリティ、効率的な通知という利点があり、イベント駆動型プログラミング、GUI 更新、Pub/Sub システムなどのシナリオで広く使用されています。
はじめに
Observer パターンは、オブジェクトがイベント通知をサブスクライブして、イベントが発生したときに自動的に応答できるようにするデザイン パターンです。このようにして、オブザーバーは明示的にポーリングせずにトピックまたはパブリッシャーから更新を受け取ることができます。
実装方法
Java のオブザーバー パターンは通常、次のインターフェイスを使用します:
Observable
(テーマ): オブザーバーの登録、登録解除、および通知のメソッドを定義します。 Observable
(主题):定义了观察者注册、取消注册和通知的方法。Observer
(观察者):定义了更新方法,该方法将在被观察的对象发生更改时被调用。在实际应用中,主题通常实现 Observable
接口,而观察者实现 Observer
接口。主题维护观察者的集合,并通过调用观察者的 update
Observer
(オブザーバー): 監視対象のオブジェクトが変更されたときに呼び出される更新メソッドを定義します。 実際のアプリケーションでは、通常、サブジェクトは Observable
インターフェイスを実装し、オブザーバーは Observer
インターフェイスを実装します。サブジェクトはオブザーバーのコレクションを維持し、オブザーバーの update
メソッドを呼び出してオブザーバーに通知します。
株価をリアルタイムで監視する必要がある株式市場アプリケーションがあると仮定します。オブザーバー パターンを使用して、この機能を実現できます。
トピック: 株式
public class Stock implements Observable { private List<Observer> observers; private double price; public Stock() { observers = new ArrayList<>(); } @Override public void addObserver(Observer observer) { observers.add(observer); } @Override public void deleteObserver(Observer observer) { observers.remove(observer); } @Override public void notifyObservers() { for (Observer observer : observers) { observer.update(this); } } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; notifyObservers(); } }
オブザーバー: 株価モニター
public class StockPriceDisplay implements Observer { private Stock stock; public StockPriceDisplay(Stock stock) { this.stock = stock; stock.addObserver(this); } @Override public void update(Observable observable) { double price = stock.getPrice(); System.out.println("Current stock price: " + price); } }
使用例では、株式オブジェクトを作成し、その価格を監視するオブザーバーを登録します:
Stock stock = new Stock(); StockPriceDisplay display = new StockPriceDisplay(stock); // 设置股票价格,这将自动触发观察者更新 stock.setPrice(100.0);
利点
通知効率: トピックが変更されると、オブザーバー パターンは更新をすべてのサブスクライバーに効率的に伝播します。
アプリケーション シナリオ以上がJava デザイン パターン オブザーバー パターンの詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。