オブザーバー パターンは パブリッシュ/サブスクライブ パターン とも呼ばれ、オブジェクト間の 1 対多 の関係です。オブジェクトが変更されると、それに依存するすべてのオブジェクトが通知され、自動的に更新されます。
抽象テーマの役割 (件名
#)
メソッドと、オブザーバーに通知する抽象メソッド を提供します。これらは、抽象クラスまたは抽象クラスによって決定されます。インターフェイスの実装
抽象オブザーバー ロール (Observer)
更新された抽象メソッドが含まれます。抽象クラスまたはインターフェイスによって実装された、特定のサブジェクトから更新通知を受信したときに呼び出されます。
具体的なサブジェクトの役割 (具体的なサブジェクト)
特定のトピックが変更されると、それ自体をサブスクライブするすべてのオブザーバーに通知します
特定のオブザーバー ロール (具体的なオブザーバー)
トピックを受信した後に自身のステータスを変更します。変更通知
実装抽象オブザーバーオブザーバーインターフェース
public interface Observer { //收到通知,改变自身状态 void update(); }
特定のオブザーバーObserverOne および ObserverTwo
public class ObserverOne implements Observer{ @Override public void update() { System.out.println("第一个观察者收到通知,状态更新了"); } }
public class ObserverTwo implements Observer { @Override public void update() { System.out.println("第二个观察者收到通知,状态更新了"); } }
SubjectInterface
#
public interface Subject { //添加观察者 void add(Observer observer); //删除观察者 void remove(Observer observer); //通知所有观察者 void notifyObservers(); //自身操作 void operation(); }#抽象ターゲット クラス
AbstractSubjectAbstract クラス。オブザーバーの数は固定されていないため、
を使用してオブザーバーを保存し、Subject インターフェイスに add、remove、notifyObservers メソッドを実装します。 . 操作メソッドは特定のターゲット クラスによって実装されますpublic abstract class AbstractSubject implements Subject{
Vector<Observer> vector = new Vector<Observer>();
@Override
public void add(Observer observer){
vector.add(observer);
}
@Override
public void remove(Observer observer){
vector.remove(observer);
}
@Override
public void notifyObservers(){
for (Observer observer : vector) {
observer.update();
}
}
}
MySubjectAbstractSubject クラスを継承します、操作メソッドを実装し、操作メソッド内で
を呼び出して、自身の状態が変化した後にオブザーバーに通知する効果を実現しますpublic class MySubject extends AbstractSubject{
@Override
public void operation() {
System.out.println("具体目标状态改变");
System.out.println("正在通知观察者。。。");
notifyObservers();
System.out.println("通知完毕!");
}
}
Test<pre class="brush:java;">public class Test {
public static void main(String[] args) {
MySubject mySubject = new MySubject();
mySubject.add(new ObserverOne());
mySubject.add(new ObserverTwo());
mySubject.operation();
}
}</pre>
概要
オブザーバー パターンは主にどのような問題を解決しますかアンダー ロー結合条件、オブジェクトの状態が変化すると、他のオブジェクトが通知を受け取る
オブザーバー パターンを使用する場合
オブジェクトの状態が変化すると、すべてが依存しますオブジェクトはブロードキャスト通知を受信します
#オブザーバー パターンの利点
オブザーバーとターゲットは抽象的に結合されており、低結合であり、一連のトリガー メカニズムを備えています
オブザーバパターンのデメリット
①対象に依存する直接オブザーバや間接オブザーバが多数ある場合、全員に通知するのに時間がかかるオブザーバー
##③オブザーバーは、ターゲットの状態がどのように変化するかを知ることはできません。ターゲットの状態が変化したことだけを知ることができます。
①JAVA にはオブザーバー パターンのサポート クラスがすでに存在しており、直接使用できます
以上がJAVAでオブザーバーパターンを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。