Latest web development tutorials

Beobachter-Muster

Wenn es viele Beziehungen zwischen Objekten sind, verwenden Sie das Beobachter-Muster (Observer-Muster). Wenn zum Beispiel ein Objekt geändert wird, wird es automatisch seine abhängigen Objekte informieren. Der Beobachter-Muster gehört zu Verhaltensmuster.

Einführung

Absichten: definieren Abhängigkeiten zwischen Objekten von Eins-zu-viele, wenn sich der Zustand eines Objekts geändert wird, werden alle Objekte, die davon abhängen werden benachrichtigt und automatisch aktualisiert.

Vor allem zu lösen: einen Zustand des Objekts Änderungsmitteilung auf die Probleme anderer Objekte, aber auch unter Berücksichtigung der Benutzerfreundlichkeit und geringe Kopplung, ein hohes Maß an Zusammenarbeit zu gewährleisten.

Wann verwendet man :ein Objekt (Zielobjekt) seinen Zustand ändert, werden alle abhängigen Objekte (Objekte Beobachter) werden benachrichtigt, Broadcast - Benachrichtigung werden.

Wie zu beheben: Die Verwendung der objektorientierten Technologie kann diese Abhängigkeit geschwächt werden.

Der Schlüsselcode: abstrakte Klasse haben eine Arraylist gespeichert Beobachter.

Anwendungsbeispiele: 1, wenn die Auktion, der Auktionator den höchsten Preis zu beobachten, und dann andere Bieter Gebot mitteilen.2, Die Reise nach Westen innerhalb Wukong Anfrage Kapitulation Red Boy Buddha, Buddha Wasser auf dem Boden eines alten Schildkröte provoke verschüttet, diese Schildkröte der Beobachter ist, beobachtet er, dass die Aktion Buddha Bewässerung.

Vorteile: 1, der Beobachter und die beobachtete sind abstrakt gekoppelt.2, einen Auslösemechanismus zu schaffen.

Nachteile: 1, wenn das beobachtete Objekt eine Menge von direkten und indirekten Beobachter hat, werden alle Beobachter benachrichtigen sind viel Zeit zu verbringen.2, wenn es eine zirkuläre Abhängigkeit zwischen dem Beobachter und dem beobachteten Ziel ist es, zu beobachten, das Ziel wird Anrufe auslösen zwischen ihnen zirkulieren kann das System zum Absturz bringen. 3, der Beobachter-Modus gibt es keinen Mechanismus der Betrachter wissen zu lassen, das Publikum ist, wie die beobachteten Veränderungen, sondern nur wissen, dass die Beobachtungs Ziel ändert.

Einsatzszenarien: 1, mehrere Unterklasse übliche Methode, und die gleiche Logik.2, wichtig, komplexe Methoden als Vorlage Methode betrachtet werden.

Anmerkung: 1, JAVA bereits Beobachter - Modus unterstützen Klassen.2, zirkuläre Referenzen zu vermeiden. 3, wenn die Reihenfolge der Ausführung, ein Betrachter kann Systemfehler stecken verursachen, verwenden in der Regel den asynchronen Modus.

Realisierung

Die Beobachter-Muster mit drei Klassen vorbehalten, Observer und Auftraggeber. Vorbehaltlich der Client-Objekt mit dem Objekt und dem Beobachter ist gebunden Beobachter Methoden gebunden Client Solutions von Objekten. Wir schaffen dieBetreff-Klasse,Observer abstrakte Klasse und erweitern die Entity - Klasse abstraktObserver- Klasse.

ObserverPatternDemo,unsere Demonstration Klassen mit Klassenobjekten und Organisationen ,gegendie Beobachter - Muster zu demonstrieren.

Das Beobachter-Muster UML-Diagramm

Schritt 1

Thema erstellen Kategorie.

Subject.java

Import java.util.ArrayList;
Import java.util.List;

public class Thema {
	
   private List <Beobachter> Beobachter 
      = New Arraylist <Observer> ();
   private int Zustand;

   public int getState () {
      Rückkehr Zustand;
   }

   public void setState (int state) {
      this.state = Zustand;
      notifyAllObservers ();
   }

   public void befestigen (Beobachter Beobachter) {
      observers.add (Beobachter);		
   }

   public void notifyAllObservers () {
      für (Beobachter Beobachter: Beobachter) {
         observer.update ();
      }
   } 	
}

Schritt 2

Erstellen Observer-Klasse.

Observer.java

public abstract class Observer {
   Betreff Thema geschützt;
   public void update ();
}

Schritt 3

Erstellen Beobachter Entity-Klasse.

BinaryObserver.java

public class BinaryObserver erstreckt Observer {

   public BinaryObserver (Subject Betreff) {
      this.subject = Subjekt;
      this.subject.attach (this);
   }

   @Override
   public void update () {
      System.out.println ( "Binary String:" 
      + Integer.toBinaryString (subject.getState ())); 
   }
}

OctalObserver.java

public class OctalObserver erstreckt Observer {

   public OctalObserver (Subject Betreff) {
      this.subject = Subjekt;
      this.subject.attach (this);
   }

   @Override
   public void update () {
     System.out.println ( "Octal String:" 
     + Integer.toOctalString (subject.getState ())); 
   }
}

HexaObserver.java

public class HexaObserver erstreckt Observer {

   public HexaObserver (Subject Betreff) {
      this.subject = Subjekt;
      this.subject.attach (this);
   }

   @Override
   public void update () {
      System.out.println ( "Hex-String:" 
      + Integer.toHexString (subject.getState ()) .toUpperCase ()); 
   }
}

Schritt 4

Verwenden SieBetreffund Beobachter Entitätsobjekten.

ObserverPatternDemo.java

public class ObserverPatternDemo {
   public static void main (String [] args) {
      Betreff subject = neues Thema ();

      neue HexaObserver (Subjekt);
      neue OctalObserver (Subjekt);
      neue BinaryObserver (Subjekt);

      System.out.println ( "First Zustandsänderung: 15");	
      subject.setState (15);
      System.out.println ( "Zweite Zustandsänderung: 10");	
      subject.setState (10);
   }
}

Schritt 5

Stellen Sie sicher, ausgegeben.

Erste Zustandsänderung: 15
Hex-String: F
Octal String: 17
Binäre String: 1111
Zweite Zustandsänderung: 10
Hex-String: A
Octal String: 12
Binäre String: 1010