Die Java -Sprache enthält viele direkte Unterstützung für Designmuster wie Befehlsmodus, Agentenmodus, Beobachtungsmodus usw. Obwohl Java diese Muster unterstützt, ist es sehr einfach und kann nicht komplexere Anwendungen erfüllen. In einfachen Szenarien kann die Verwendung dieser Klassen jedoch häufig den Effekt des Schattens erreichen. Wenn Sie also keine besonderen Bedürfnisse haben, ist es besser, diese Klassen in Java zu verwenden.
Der Observer -Modus, auch als Überwachungsmodus und Beobachtermodus bezeichnet, ist einer der klassischen Designmodi (einer der GOF). In der Java -Sprache gibt es hauptsächlich die folgenden Klassen und Schnittstellen, die für dieses Muster unterstützt werden, alles aus dem Java.Beans -Paket:
java.beans.propertychangelistener (Schnittstelle) java.beans.propertychangesupport (Klasse) Java.beans.PropertychangeEvent (Klasse) java.beans.propertychangelistenererererer
Dies ist eine Schnittstelle. Offensichtlich sind alle Klassen, die diese Schnittstelle implementieren, Hörer (oder Beobachter), die an einigen Änderungen des angehenden Objekts interessiert sein werden. Diese Schnittstelle hat eine Methode:
public void PropertyChange (PropertyChangeEvent evt) {// Todo automatisch generierte Methode Stub} Die Schnittstellendefinition ist einfach und ihre Funktion ist offensichtlich. Akzeptieren Sie eine Veranstaltung (PropertyChangeEvent, die vom Hörer generiert wird) und reagieren Sie dann auf dieser Veranstaltung.
Java.beans.Propertychangesupport
Diese Klasse wird in der Klasse des Beobachters verwendet, um registrierte Beobachter zu retten und ihnen die Änderungen des Beobachters zu liefern. Es gibt nicht viele Methoden für diesen Typ, aber es wird immer noch nur 100% von ihnen eingeführt, sonst können Sie Ihr Gehirn nicht verwenden, haha.
öffentliches propertychangesupport (Object SourceBean)
Dies ist der Konstruktor, und die Parameter sind der Hörer. PropertyChangelistener wird im Allgemeinen als Eigenschaft des Hörers verwendet. Im Allgemeinen wie folgt verwendet:
Private PropertyChangesupport -Hörer = new PropertyChangesupport (dies);
Beachten Sie, dass dieser Zuhörer nicht nur einen Zuhörer darstellt, er kann eine Gruppe von Zuhörern sein. Also, wer sind diese Zuhörer? Diesmal habe ich die folgende Methode verwendet.
Public void AddPropertyChangelistener (PropertyChangelistener -Hörer)
Diese Klasse ist zu einfach und füge den Hörer hinzu. Genau wie der 17. Nationalkongress der Kommunistischen Partei Chinas muss er sich zuerst registrieren, wenn ein Reporter interviewen möchte. Offensichtlich kann diese Methode mehrmals aufgerufen werden (hinzufügen). Addition und Subtraktion:
öffentliche void removePropertychangelistener (PropertyChangelistener -Hörer)
Wenn der Monitor nicht an Änderungen in der überwachten Person interessiert ist, wird er vom Monitor vertrieben.
Okay, alle Reporter sind hier, und wenn sich der Monitor ändert, ist es an der Zeit, die Person zu benachrichtigen. Verwenden Sie eine der folgenden Methoden:
öffentliche void FirePropertychange (PropertyChangeEvent EVT) Public void FirePropertychange (String PropertyName, Boolean OldValue, Boolean NewValue) Public Void FirePropertychange (String PropertyName, int OldValue, Int New Value) Public Void FirePropertychange (String Propertyname, Objekt
Tatsächlich werden die Parameter der letzten drei Methoden in PropertyChangeEvent eingekapselt, und dann wird die erste Methode aufgerufen. In Wirklichkeit rufen wir jedoch immer noch direkt eine der letzten drei an und kümmern uns nicht um die Kapselung. Die letzten drei Methoden haben drei Parameter, unter denen OldValue und NewValue die Werte vor und nachher sind. Der erste besteht darin, einen Namen zu ändern, damit die Hörer basierend auf diesen Namen antworten können. Genau wie in einem Treffen werden alle staatlichen Informationen von Reportern gehört, aber einige Journalisten interessieren sich nur für das Thema Taiwan, während andere an der Ausgabe von China-Japan interessiert sind.
Das ist alles die Einführung in die PropertyChangesupport -Methode. Beachten Sie, dass PropertyChangesupport in der Klasse (normalerweise ein Modell) des Beobachters verwendet wird, seine Methoden nur hier aufgerufen werden, wenn sie beobachtet werden.
Java.beans.PropertyChangeEvent
Ich bin zu faul, um diese Klasse vorzustellen. Schauen Sie sich nur seine Hauptmethode an und verstehen Sie, was los ist
Öffentliche String GetPropertyName () öffentliches Objekt GetNewValue () öffentliches Objekt GetoldValue ()
Es gibt drei Kategorien, und das andere besteht darin, bestimmte Themen zu analysieren. Nehmen wir zuerst ein Beispiel, den Beobachter:
öffentliche Klasse Domain {Protected String ID; geschützter String -Name; geschützter String Desname; geschützte PropertyChangesupport -Hörer = new PropertyChangesupport (dies); public String getid () {return id; } public void setID (String -ID) {this.id = id; FirePropertychange ("Domain.id", Null, ID); } public String getDesname () {return Desname; } public void setDesname (String desName) {this.desname = Desname; FirePropertychange ("Domain.Desname", Null, Desname); } public String getName () {return name; } public void setName (String -Name) {this.name = name; FirePropertychange ("Domain.Name", Null, Name); } public void addPropertyChangelistener (PropertyChangelistener Hörer) {Hörer.AddPropertychangelistener (Hörer); } public void FirePropertychange (String Propname, Objekt OldValue, Objekt NewValue) {Hörer.FirePropertychange (Propname, OldValue, NewValue); } public void removePropertychangelistener (PropertyChangelistener Hörer) {Hörer.RemovePropertyChangelistener (Hörer); }} Einige Leute interessieren sich für die drei Attribute der Domäne. Hier ist einer dieser Menschen:
öffentliche Klasse SimpleObserver implementiert PropertyChangelistener {.... @Override public void PropertyChange (PropertyChangeEvent evt) {if (evt.getPropertyName (). Equals ("domain.name")) {// machen einige Arbeiten}}} Hier ist eine einfache Testklasse:
öffentliche Klasse Simpleetest {public static void main (String [] args) {SimpleObserver Observer = new SimpleObServer (); Domain Domain = new Domain (); Domain.AddPropertyChangelistener (Beobachter); Domain.setName ("yangsq"); ......}}Offensichtlich kann die Ausführung der PropertyChange -Methode in SimpleObserver beobachtet werden.