Lassen Sie uns zunächst vorstellen, was ein Zuhörer ist:
Hörer - ist ein gewöhnliches Java -Programm, das die ausstehende Schnittstelle implementiert. Dieses Programm wird speziell verwendet, um auf Methodenaufrufe einer anderen Klasse zu hören.
Dies verwendet den Observer -Modus.
Was ist der Beobachtermodus:
Definiert eine Eins-zu-Viele-Abhängigkeit zwischen Objekten. Wenn sich der Status eines Objekts ändert, werden alle Objekte, die davon abhängen, benachrichtigt, um automatisch zu aktualisieren.
Beispiel:
Der addxxxxListener in der GUI -Programmierung ist der Beobachtermodus.
Zum Beispiel Hinzufügen von Hörereignissen zu Schaltflächenklicks, Hinzufügen von Hörereignissen in die Tastatur usw. Hinzufügen von usw.
Drei wichtige Kategorien von Beobachtermuster:
Die Quelle des Ereignisses wird angehört, dh das von uns verwendete Objekt.
Der registrierte Hörer wird speziell verwendet, um die aktuell verwendeten Objekte anzuhören.
Das Ereignisobjektereignis ist das Objekt, das angehört wird!
Schauen wir uns zunächst eine einfache Version des von selbst geschriebenen Monitors an.
Einfache Version:
Es gibt Ereignisquellen, Zuhörer und Testkurse.
Die Veranstaltung wird in der nächsten Vollversion implementiert.
Entwicklungsschritte:
Schritt 1: Implementieren Sie eine Klassenperson, die angehört werden muss.
Schritt 2: Implementieren Sie eine Hörschnittstelle iPersonrunListener.
Schritt 3: Geben Sie in Personalklasse eine Methode (oder mehrere, ich stelle hier 2 Methoden an) zur Registrierung von iPersonrunListener -Klassen an, d. H. Addbefore und Addafter
Schritt 4: Die Instanz der iPersonrunListener -Klasse muss in der Personklasse verwaltet werden.
Schritt 5: Wenn Sie die Person aufrufen.
Schritt 6: In der Demo -Klasse werden die Person so sofort und registrieren Sie einen Hörer.
Person:
Paket cn.Hncu.designPattern1; Public Class Person {private String -Name; private IPersonrunListener Listener1; private IPersonrunListener Listener2; public person (String name) {super (); this.name = name; } public void run () {if (listener1! = null) {listener1.fighting (); } System.out.println (Name+"Run ..."); if (listener2! = null) {listener2.fighting (); }} public void addBefore (iPersonrunListener -Listener) {this.Listener1 = Listener; } public void addAfter (IPersonrunListener -Listener) {this.Listener2 = Listener; }} Schnittstelle IPersonrunListener {public void kighting ();}Demo
Paket cn.Hncu.designPattern1; Public Class Demo {public static void main (String [] args) {Person Person = New Person ("Zhang San"); IpersonrunListener listener = new ipersonrunListener () {@Override public void Fighting () {// Es gibt viele Dinge, die Sie hier tun können, nicht nur ausgabe // Da Sie das Ereignisobjekt noch nicht geschrieben haben, können Sie das System.out.println nicht erhalten ("Seien Sie für ihn zuerst ..."). }}; Person.addbefore (Hörer); A a = neu a (); Person.Addafter (a); Person.run (); }} Klasse A implementiert ipersonrunListener {@Override public void kighting () {// Es gibt viele Dinge, die Sie hier tun können, nicht nur ausgabe // Da Sie das Ereignisobjekt noch nicht geschrieben haben, können Sie das System nicht erhalten. }}Ausgabe:
In der Vollversion die Ereignisquelle hinzufügen:
Hier wurde dem vorherigen ein Event-Event-Objekt hinzugefügt. Es gilt als Vollversion.
Entwicklungsschritte:
Schritt 1: Fügen Sie weiterhin eine Personevent -Klasse basierend auf der vorherigen Seite hinzu (beachten Sie, dass es sich um eine Klasse handelt, keine Schnittstelle), die das Ereignisobjekt darstellt.
Schritt 2: Fügen Sie dem Personevent -Objekt ein Attribut hinzu, um das Ereignisquellobjekt zu identifizieren.
Schritt 3: Ändern Sie die Kampfmethode der PersonListener -Schnittstelle und lassen Sie sie einen Personevent -Parameter erhalten.
Schritt 4: Wenn festgestellt wird, dass die PersonListener -Eigenschaft nicht leer ist, wird die Kampfmethode aufgerufen, das Personevent wird so sofort und die Kampfmethode an die Kampfmethode übergeben.
Schritt 5: Testen Sie in der Hauptmethode, ob es sich um das gleiche Objekt über die Getource -Methode von Personevent handelt.
Person.java
Paket cn.Hncu.designPattern2; Public Class Person {private String -Name; privater IPersonrunListener -Listener; public person (String name) {super (); this.name = name; } public void run () {System.out.println (Name+"Ausführen ..."); if (hörer! }} public void addpersonListener (IPersonrunListener -Listener) {this.Listener = Listener; } public String getName () {return name; } @Override public String toString () {return "person [name =" + name + ", listener =" + hörer + "]"; }} Schnittstelle iPersonrunListener {public void kighting (personevent pe);} Klasse Personevent {Person p = null; public Personevent (Person p) {this.p = p; } public String getName () {return p.getName (); } public Object Getource () {return p; }} // Wir können auch eine grundlegende Klasse schreiben, die uns hilft, die Schnittstelle zu implementieren // Es schreibt unsere gemeinsame Vorlage. Wenn wir diese Klasse erben, können wir aufhören, sie zu schreiben. // Wenn es unterschiedliche Funktionen gibt, werden wir es selbst schreiben, um diese Klasse -Klasse zu überschreiben. DefaultCatListener implementiert iPersonrunListener {@Override public void Fighting (Personevent pe) {System.out.println ("Standardaktion ..."); }}Demo.java
Paket cn.hncu.designPattern2; öffentliche Klasse Demo {public static void main (String [] args) {Person p1 = new Person ("Zhang san"); Person p2 = neue Person ("Jack"); IpersonrunListener listener = new ipersonrunListener () {@Override public void kämpfe (personevent pe) {System.out.println (pe.getSource ()+"Es wurde ausgeführt ..."); if (pe.getName (). Equals ("Zhang san") {System.out.println (pe.getName ()+"Auf dem ersten Ort laufen ..."); }}}}; p1.addpersonListener (Hörer); p2.addpersonListener (Hörer); p1.run (); p2.run (); Person p3 = neue Person ("li si"); p3.addpersonListener (neuer defaultCatListener ()); p3.run (); }}Demo -Ergebnisse:
Dies sind die Grundprinzipien. Wenn Sie die Ausgabe des Ereignisses in die benötigte Aktion ändern, können Sie die gewünschte Funktion erkennen. Fügen Sie einen Hörer hinzu, und Sie können die Methode, die Sie vor oder nach der Auslaufmethode anrufen möchten, anrufen und die Aktion ausführen, die Sie ausführen möchten!
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.