【Text】
1. Definition des Beobachtermusters:
Einfach ausgedrückt, das Beobachtermuster definiert eine Eins-zu-Viele-Abhängigkeit, sodass ein oder mehrere Beobachterobjekte ein Themenobjekt anhören können. Wenn sich der beobachtete Zustand ändert, muss der entsprechende Beobachter so benachrichtigt werden, dass diese Observer -Objekte automatisch aktualisiert werden können. Zum Beispiel: Der Ereignisverarbeitungsmechanismus in der GUI nimmt den Beobachtermodus an.
2. Implementierung des Beobachtermodus:
Subjekt (zu beobachtende Objektschnittstelle): Gibt die einheitliche Grenzfläche von ConcreteSubject an; Jedes Thema kann mehrere Beobachter haben; Concretesubject (spezifische beobachtete Objekte): Verwaltet eine Liste von Verweise auf alle spezifischen Beobachter; Wenn sich der Status ändert, wird eine Benachrichtigung an alle registrierten Beobachter gesendet. Beobachter (Beobachter -Schnittstelle): Gibt die einheitliche Schnittstelle von konkreterobserver an; Definiert eine update () -Methode, die aufgerufen wird, wenn sich der Status des beobachteten Objekts ändert. ConcreteObserver: Behält einen Verweis auf ConcreteSubject bei; Der spezifische Zustand wird mit ConcreteSubject synchronisiert; Implementiert die Observer -Schnittstelle, die Funktion der update () -Methode: Sobald eine Änderung des Subjekts erkannt wurde, werden die Informationen aktualisiert.
Das Diagramm wird wie folgt beschrieben:
Hinweis: In der beobachteten Klasse befindet sich ein Satz, um alle Beobachter aufrechtzuerhalten.
3. Geben Sie Beispiele an:
[Schema 1]: Definieren Sie die Schnittstelle oder Klasse selbst, um das Beobachtermuster zu implementieren.
Die Schritte sind wie folgt:
(1) Definieren Sie die Schnittstelle, die vom Beobachter besessen ist:
Paket com.vince.observer; public interface beobachtbar {// Registrieren Sie sich als Beobachter public void Registerrobserver (Beobachterbeobachter); // Die Beobachter öffentliche void removeObserver (Beobachter des Beobachters); // alle Beobachter benachrichtigen, um Informationen zu aktualisieren,(2) Definieren Sie den spezifischen Beobachter: Tasse
Paket com.vince.observer; import Java.util.Vector; öffentliche Klassenpokal implementiert beobachtbar {// Eine Liste von Observer -Objekten, die vom privaten Vektor des Observers aufrechterhalten werden. privater Schwimmerpreis; public Cup (Float Price) {this.price = Preis; } public float getPrice () {Rückgabepreis; } public void setPrice (float price) {// alle Beobachter benachrichtigen, wenn der Preis this.price = preis geändert wird; NotifyObServers (); } @Override public void RegisterObserver (Beobachter Observer) {// Register Observer vector.add (Beobachter); } @Override public void removeObserver (Beobachter Observer) {// Beobachter Vector.Remove (Beobachter); } @Override public void musifyObServers () {// Implementieren Sie alle Observer -Objekte für (Beobachter Observer: Vector) {Observer.update (Preis); }}}(3) Definieren Sie die gemeinsame Schnittstelle, die der Beobachter hat: (Aktualisierung der Daten ist natürlich das Endergebnis, das mit dem Beobachter durchgeführt werden soll)
Paket com.vince.observer; öffentliche Schnittstelle Beobachter {public void Update (Float Price); 5}(4) bestimmte Beobachterobjekte definieren:
Paket com.vince.observer; Person im öffentlichen Klassen implementiert Observer {private String -Name; public person (String name) {this.name = name; } @Override public void update (float price) {System.out.println (Name+"Der Preis des von Ihnen folgenden Bechers wurde aktualisiert:"+Preis); }}(5) Test:
paket com.vince.observer; public class test {public static void main (String [] args) {// Erstellen Sie eine Observer -Objektbecherpuppe = neuer Cup (3000); // zwei Beobachterobjekte erstellen Person p1 = neue Person ("Leben 1"); Person P2 = neue Person ("Leben 2"); // Registrieren Sie sich als Beobachterpoll.registerObserver (P1); doll.registerObserver (p2); System.out.println ("erste Runde der Promotion:"); Doll.SetPrice (2698); // Preisänderungen System.out.println ("zweite Runde Promotion:"); Doll.SetPrice (2299); // System.out.println ("zweite Runde Promotion:"); Doll.SetPrice (1998); Doll.Removeobserver (P2); // Life 2 System.out.println entfernen ("vierte Runde Promotion:"); Doll.SetPrice (1098); }}Nach dem Laufen werden die Ergebnisse wie folgt angezeigt:
[Schema 2]: Rufen Sie die JDK -API direkt an, um sie zu implementieren.
Die Schritte sind wie folgt:
(1) Implementieren Sie das spezifische Observer -Objekt, indem Sie die beobachtbare Klasse erben:
Paket com.vince.observer2; Import Java.util.Observable; Public Class Cup erweitert beobachtbar {privater Schwimmerpreis; public Cup (Float Price) {this.price = Preis; } public float getPrice () {Rückgabepreis; } public void setprice (float price) {this.price = price; this.setchanged (); // Benachrichtigung haben die Daten dies geändert. NotifyObServers (); }}(2) Implementieren spezifische Beobachterobjekte, indem die Schnittstelle java.util.observer implementiert wird:
Paket com.vince.observer2; Import Java.util.Observable; Import Java.util.observer; Person im öffentlichen Klassen implementiert Observer {private String -Name; public person (String name) {this.name = name; } @Override public void update (beobachtbar o, Objekt arg) {if (o Instanceof Cup) {Cup Cup = (Cup) o; System.out.println (Name+"Der Preis des Tasses, den Sie befolgen, wurde aktualisiert:"+cup.getPrice ()); }}}(3) Test:
Paket com.vince.observer2; public class test {public static void main (String [] args) {Cup Cup = New Cup (3000); Person p1 = neue Person ("Leben 1"); Person P2 = neue Person ("Leben 2"); Cup.Addobserver (P1); Cup.Addobserver (P2); System.out.println ("erste Runde der Promotion"); Cup.SetPrice (2988); System.out.println ("zweite Runde der Promotion"); Cup.SetPrice (2698); Cup.DeleteObserver (P2); System.out.println ("dritte Runde der Promotion"); Cup.SetPrice (1998); }}Nach dem Laufen sind die Ergebnisse wie folgt:
【Projektdokumente】
Link: http://xiazai.vevb.com/201609/yuanma/javaseguancha(vevb.com).rar
4. Zusammenfassung: (Die Rolle des Beobachtermodus)
Das Beobachtermuster erzeugt eine abstrakte Kopplung zwischen dem Beobachter und dem Beobachter. Alle Beobachtercharaktere wissen nur eine bestimmte Liste von Beobachtern.
Da der Beobachter und der Beobachter nicht eng miteinander verbunden sind, können sie zu verschiedenen Abstraktionsniveaus gehören. Wenn sowohl der Beobachter als auch der Beobachter zusammengeworfen werden, muss das Objekt die Abstraktions- und Konkretisierungspegel überschreiten.
Der Beobachtermodus unterstützt die Übertragungskommunikation. Der Beobachter wird allen registrierten Beobachtern eine Mitteilung ausstellen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.