Dieser Artikel beschreibt die Verwendung des Beobachtermodus zur Implementierung der hohen Temperaturwarnfunktion des meteorologischen Büros. Teilen Sie es für Ihre Referenz wie folgt weiter:
1. Musterdefinition
Beobachtermodus, auch als Veröffentlichung/Abonnement -Modus bekannt. Das Beobachtermuster definiert eine Eins-zu-Viele-Abhängigkeit zwischen Objekten. Wenn sich der Status eines Objekts ändert, werden alle Objekte, die davon abhängen, benachrichtigt und automatisch aktualisiert.
2. Beispiele des Modells
1 Musteranalyse
Wir leihen uns die Hochtemperaturwarnung des Meteorologischen Büros aus, um dieses Modell zu veranschaulichen.
2 Beobachtermuster Statische Klassendiagramm
3 Code Beispiele
3.1 Beobachter Interface-Iobserver
Paket com.demo.observer; import com.demo.subject.isubject;/** * Observer Interface * @Author * */public interface iobserver {// Methode öffentlicher void -Update aktualisieren (Isubject -Subjekt);}3.2 Themen-Schnittstellen-Isubjekt
Paket com.demo.subject; com.demo.observer.iobserver;/** * Themenschnittstelle (Beobachter) * * @author * */public interface isubject {/** * Hinzufügen von Beobachern * * @param Beobacher * @return */public boolean add (iobserver add (iBserver); / ** * Beobachter löschen * * @param Observer * @return */ public boolean entfernen (iobserver observer); / *** Benachrichtigen Sie alle Beobachter, Daten zu aktualisieren*/ public void noachAlllobServer (); / ** * Setzen Sie den Temperaturwert * * @Param Temperatur */ öffentliche Hohlraum -Siedeemperatur (Schwimmertemperatur); / ** * Erhalten Sie eine Temperaturwarnung * * @return */ public String temperatureReport ();}3.3 Implementierung eines Subjekts in bestimmten Themen
Paket com.demo.subject; import Java.util.iterator; import Java.util.Vector; Import com.demo.observer aufeinanderfolgende Tage. * * (2) Orange -Warnsignal mit hoher Temperatur * * Standard: Die maximale Temperatur steigt innerhalb von 24 Stunden auf über 37 ° C. * * (Iii) Hochtemperaturrotes Warnsignal * * Standard: Die maximale Temperatur steigt innerhalb von 24 Stunden auf über 40 ° C. */ private Schwimmertemperatur; // Frühwarnstufe Private String Warninglevel; // Beobachterliste für private endgültige Vektor <Iobserver> Vektor speichern; / *** Konstrukt -Methode initialisieren Sie Beobachterliste*/ public Subjekt () {vector = new vector <Iobserver> (); } / *** Beobachter hinzufügen* / public boolean add (iobserver observer) {if (observer! = Null &&! } return false; } / *** Beobachter entfernen* / public boolean entfernen (iObserver observer) {return vector.remove (Beobachter); } / *** Benachrichtigen Sie alle Beobachter, Daten zu aktualisieren. (iterator.hasnext ()) {(iterator.next ()). Update (this); = "gelb"; Temperatur*/ public void Siedleratur (Floattemperatur) {this.temperature = Temperatur;3.4 Persönlicher Beobachterpersonobserver
package com.demo.observer;import com.demo.subject.ISubject;/** * Individual user observer* @author * */public class PersonObserver implements IObserver{ public void update(ISubject subject) { System.out.println("Individuals receive high temperature warning: " + subject.temperatureReport()); }}3.5 Regierungsbeobachter-Governmentobserver
Paket com.demo.observer; import com.demo.subject.isubject;/** * Regierungsnutzerbeobachter * @Author * */public class GovernmentObserver implementiert IOBSERVERVERVERVERVERVERVERVERVERVERVERVERVERVERVERVERV. }}
3.6 CompanyObserver
Paket com.demo.observer; import com.demo.subject.isubject;/** * Enterprise and Institutions Benutzerbeobachter * @Author * */public class CompanyObserver implementiert iobserver {public void Update (isubject subjekt) {system.out.println ("Enterprises und Institutionen erhalten) und Institutionen, die Hochtemperaturen und Institutionen erhalten. }}3.7 Lassen Sie das System einen Client ausführen
Paket com.demo; import java.util.random; import com.demo.observer.companyobserver; import com.demo.observer.governmentobserver; import com.demo.observer.personobserver; com.demo.subjepject. @Author * */public class Client {/** * @param args */public static void main (string [] args) {// themenobjekt isubject thema = new Subjekt (); // Beobachter von Enterprise and Institution Subjekt.ADD (New CompanyObserver ()); // Beobachter des staatlichen Nutzers Fach. // Beobachter des einzelnen Benutzer -Subjekts fügen. Random random = new random (); int i = 0; while (++ i <10) {// Random Temperatur -Subjekt einstellen. }}}4 Auslaufergebnisse
========= Die meteorologische Abteilung gibt einen gelben Hochtemperaturalarm aus!
Unternehmen und Institutionen erhalten hohe Temperaturwarnung: Temperatur: 35,0
Regierungsabteilungen erhielten Hochtemperaturwarnung: Temperatur: 35,0
Individuen erhalten eine hohe Temperaturwarnung: Temperatur: 35,0
========= Die meteorologische Abteilung gibt einen roten Alarm für hohe Temperatur aus!
Unternehmen und Institutionen erhalten eine hohe Temperaturwarnung: Temperatur: 43,0
Regierungsabteilungen erhielten Hochtemperaturwarnung: Temperatur: 43,0
Individuen erhalten eine hohe Temperaturwarnung: Temperatur: 43,0
========= Die meteorologische Abteilung gibt einen orangefarbenen Alarm mit hoher Temperatur aus!
Unternehmen und Institutionen erhalten hohe Temperaturwarnung: Temperatur: 37.0
Regierungsabteilungen erhielten Hochtemperaturwarnung: Temperatur: 37,0
Individuen erhalten eine hohe Temperaturwarnung: Temperatur: 37,0
3. Die Designprinzipien dieses Modells
1 "Open-Closed" -Prinzip
2 Prinzip der Einzelverantwortung
3. Das Prinzip der Abhängigkeitsinversion
4. Verwenden Sie Anlässe
1 Wenn ein abstraktes Modell zwei Aspekte hat, von denen einer von der anderen abhängt und in unabhängige Objekte eingekapselt und unabhängig verändert und sich gegenseitig verändert und sich gegenseitig multiplexte.
2 Wenn die Änderung eines Objekts in einem System gleichzeitig den Inhalt anderer Objekte ändern muss, wissen Sie jedoch nicht, wie viele Objekte geändert werden sollen.
3 Wenn die Änderung eines Objekts an andere Objekte mitgeteilt werden muss, um entsprechende Änderungen vorzunehmen, ist es jedoch nicht möglich zu bestimmen, wer das Objekt benachrichtigt wird.
5. "Daten ziehen" statische Klassendiagramm
Das sogenannte "Pushing-Daten" bedeutet, dass bei ändert sich das beobachtete Objekt die relevanten Daten durch Parameter an den Beobachter übergeben werden, was den Beobachter an den Beobachter bildet. Das statische Klassendiagramm lautet wie folgt:
6. "Daten ziehen" statische Klassendiagramm
Das sogenannte "Pull-Daten", das Observer-Objekt enthält einen Verweis auf die Instanz des beobachteten Objekts. Wenn sich das beobachtete Objekt ändert, werden keine Daten an den Beobachter übergeben. Der Beobachter erhält aktiv die relevanten Daten basierend auf der Referenz des beobachteten Objekts. Dies bildet den Beobachter aktiv Daten aus dem beobachteten Objekt. Das statische Klassendiagramm lautet wie folgt:
For more Java-related content, readers who are interested in this site can view the topics: "Introduction and Advanced Tutorial on Java Object-Oriented Programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills", "Summary of Java File and Directory Operation Skills" and "Summary of Java Cache Operation Skills"
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.