2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Das Observer-Muster wird auch als Publish/Subscribe-Muster bezeichnet. GOF definiert das Beobachtermuster wie folgt: Definieren Sie eine Eins-zu-Viele-Abhängigkeitsbeziehung zwischen Objekten, sodass sich mehrere Beobachterobjekte gleichzeitig auf dasselbe Objekt konzentrieren können. Wenn sich der Zustand des Objekts ändert, werden alle davon abhängigen Objekte erhalten Automatisch benachrichtigt und aktualisiert.
Wie in der folgenden Abbildung dargestellt, enthält das Beobachtermuster 5 Arten von Objekten.
Schauen wir uns die konkrete Implementierung an.
(1) Observer-Schnittstelle Observer.java definiert eine einheitliche Update-Schnittstelle update(). Der Quellcode wird im folgenden Programm gezeigt.
package behavior.observer;
/**
* @author Minggg
* 观察者接口
*/
public interface Observer {
public void update();
}
(2) Die Beobachter-Implementierungsklasse Observer1.java ist eine spezifische Implementierung eines Beobachters und ihre Aktualisierungsfunktion wird verwendet, um eine Zeichenfolge an die Konsole auszugeben. Der Quellcode wird im folgenden Programm gezeigt.
package behavior.observer;
/**
* @author Minggg
* 具体观察者
*/
public class Observer1 implements Observer {
public void update(){
System.out.println("观察者1得到通知!");
}
}
(3) Die Beobachter-Implementierungsklasse Observer2.java ist eine spezifische Implementierung eines anderen Beobachters und ihre Aktualisierungsfunktion wird verwendet, um eine Zeichenfolge an die Konsole auszugeben. Der Quellcode wird im folgenden Programm gezeigt.
package behavior.observer;
/**
* @author Minggg
* 具体观察者
*/
public class Observer2 implements Observer {
public void update(){
System.out.println("观察者2得到通知!");
}
}
(4) Die beobachtete Schnittstelle Subject.java definiert drei Schnittstellenfunktionen für Betriebsbeobachter und definiert eine spezifische Betriebsfunktionsschnittstelle zur Darstellung ihrer eigenen Funktionen. Der Quellcode wird im folgenden Programm gezeigt.
package behavior.observer;
/**
* @author Minggg
* 被观察者接口
*/
public interface Subject {
// 增加观察者
public void attach(Observer observer);
// 删除观察者
public void detach(Observer observer);
// 通知所有观察者
public void notifyObservers();
// 自身的操作接口
public void operation();
}
(5) Die beobachtete abstrakte Klasse AbstractSubject.java stellt einen Vektorlistenvektor zum Speichern aller Beobachterobjekte bereit und schreibt Implementierungsfunktionen zum Betreiben der Listenobjekte. Der Quellcode wird im folgenden Programm gezeigt.
package behavior.observer;
import java.util.Enumeration;
import java.util.Vector;
/**
* @author Minggg
* 被观察者抽象类
*/
public abstract class AbstractSubject implements Subject {
private Vector