Bringen Sie Ihnen bei, wie Sie den Beobachtermodus in Javascript implementieren

Bringen Sie Ihnen bei, wie Sie den Beobachtermodus in Javascript implementieren

Was ist das Beobachtermuster?

  • Das Beobachtermuster ist ein Entwurfsmuster.
  • Das Beobachtermuster definiert eine Eins-zu-viele-Abhängigkeitsbeziehung zwischen Objekten. Wenn sich der Status eines Objekts ändert, werden alle davon abhängigen Objekte benachrichtigt und automatisch aktualisiert.
  • Um es einfach auszudrücken: Im Beobachtermuster gibt es zwei Modelle: ein Beobachtermodell und ein beobachtetes Modell. Wenn sich das beobachtete Objekt ändert oder transformiert, wird der Beobachter benachrichtigt.

Szenariosimulation

  • Wenn Double 11 kommt, sind Leute, die am Double 11 Waren kaufen möchten, Beobachter.
  • Das Produkt, das Sie kaufen möchten, ist das beobachtete
  • Um es anschaulicher zu machen, fügen Sie einen Händler hinzu, um den Preis des Produkts zu ändern. Der Händler ist gleichzeitig der Herausgeber (Veröffentlichen)
  • Am Tag des Double 11 ändert der Händler (Publisher) den Preis des Produkts (Observed) und anschließend erhält die Person, die das Produkt abonniert (Observer), eine Benachrichtigung.

Bildbeschreibung hier einfügen

Code-Implementierung

//Beobachter-Entwurfsmuster //Herausgeber-->Händler var shopObj = {};
//Produktliste [Schlüssel:[]], Schlüssel ist der Produktname shopObj.list = [];
//Abonnementmethode shopObj.listen = Funktion (Schlüssel, fn) { // Schlüssel ist das Produktmodell, fn ist das Abonnementverhalten if (!this.list[Schlüssel]) {
        diese.liste[Schlüssel] = [];
    }
    this.list[key].push(fn); //Fügen Sie der Produktliste ein Abonnement mit dem Produktnamenschlüssel hinzu}
//Nachricht veröffentlichen Methode shopObj.publish = function (key) {
    //var key = arguments[0]; //Wenn Sie den Parameter key nicht übergeben, können Sie auch Folgendes tun: var fns = this.list[key];
    // für (var i = 0; i < fns.length; i++) {
        für(var i = 0 ,fn; fn = fns[i++];){
        //Führen Sie die abonnierte Funktion fn argumentmnts aus, um alle Argumente zu speichern // var fn = fns[i++];
        fn.apply(diese, Argumente)
    }
}
// Benutzer A fügt ein Abonnement hinzushopObj.listen("Huawei", function (brand, model) {
    console.log("Benutzer A hat erhalten: " + Marke + Modell + "Der Preis des Mobiltelefons wurde reduziert");
})
// Benutzer B fügt Abonnement hinzu shopObj.listen("Huawei", function (brand, model) {
    console.log("Benutzer B hat erhalten: " + Marke + Modell + "Der Preis des Mobiltelefons wurde reduziert");
})
//c Benutzer fügt Abonnement hinzushopObj.listen("Abonnement", function (Marke, Modell) {
    console.log("Benutzer C hat erhalten: " + Marke + Modell + "Der Preis des Mobiltelefons wurde reduziert");
})
//Double 11-Händler veröffentlichen Informationen zu Huaweis PreissenkungenshopObj.publish("Huawei", "p30");
shopObj.publish("Shop", "Mix4");

Bildbeschreibung hier einfügen

Refactoring des Codes

//Beobachter-Entwurfsmuster var Eevent = {
    //Produktliste [Schlüssel:[]], Schlüssel ist der Produktname Liste: [],
    //Abonnementmethode listen: function (key, fn) { // key ist das Produktmodell, fn ist das Abonnementverhalten if (!this.list[key]) {
            diese.liste[Schlüssel] = [];
        }
        diese.Liste[Taste].push(fn);
    },
    //Nachricht veröffentlichen Methode publish: function (key) {
        //var key = arguments[0]; //Wenn Sie den Parameter key nicht übergeben, können Sie auch Folgendes tun: var fns = this.list[key];
        // für (var i = 0; i < fns.length; i++) {
        für (var i = 0, fn; fn = fns[i++];) {
            //Führen Sie die abonnierte Funktion fn argumentmnts aus, um alle Argumente zu speichern // var fn = fns[i++];
            fn.apply(diese, Argumente)
        }
    }
}
//Initialisierung des Observer-Objekts var initEvent = function (obj) {
    für (var i in Eevent) {
        obj[i] = Ereignis[i];
    }
}
//Herausgeber->Händler var shopObj = {};
initEvent(shopObj);
// Benutzer A fügt ein Abonnement hinzushopObj.listen("Huawei", function (brand, model) {
    console.log("Benutzer A hat erhalten: " + Marke + Modell + "Der Preis des Mobiltelefons wurde reduziert");
})
// Benutzer B fügt Abonnement hinzu shopObj.listen("Huawei", function (brand, model) {
    console.log("Benutzer B hat erhalten: " + Marke + Modell + "Der Preis des Mobiltelefons wurde reduziert");
})
//c Benutzer fügt Abonnement hinzushopObj.listen("Abonnement", function (Marke, Modell) {
    console.log("Benutzer C hat erhalten: " + Marke + Modell + "Der Preis des Mobiltelefons wurde reduziert");
})
//Double 11-Händler veröffentlichen Informationen zu Huaweis PreissenkungenshopObj.publish("Huawei", "p30");
shopObj.publish("Shop", "Mix4");

Bildbeschreibung hier einfügen

Zusammenfassen

Dieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalt auf 123WORDPRESS.COM lesen können!

Das könnte Sie auch interessieren:
  • Einführung und Verwendung des JS-Beobachtermodus
  • So implementieren Sie das Beobachtermuster in JavaScript
  • js Beobachtermodus Bullet-Screen-Fall
  • JavaScript-Entwurfsmuster: Detaillierte Erläuterung des Beobachtermodus und des Publish-Subscribe-Modus
  • JavaScript-Entwurfsmuster – Prinzipien und Anwendungsbeispiele des Observer-Musters
  • Einfaches Beispiel für den in nativem JS implementierten Beobachter- und Abonnentenmodus
  • Prinzipien und Anwendungsbeispiele für das JavaScript Observer Pattern

<<:  Verwenden Sie SWFObject, um das Browserkompatibilitätsproblem beim Einfügen von Flash in HTML perfekt zu lösen

>>:  6 Tipps für Webdesign

Artikel empfehlen

Zusammenfassung der DTD-Verwendung in HTML

DTD ist ein Satz grammatikalischer Regeln zur Ausz...

Implementierung der Installation und Deinstallation von CUDA und CUDNN in Ubuntu

Inhaltsverzeichnis Vorwort Installieren des Grafi...

Kostenlose Installationskonfigurationsmethode für MySQL 5.7.18 WinX64

1. Herunterladen 2. Dekompression 3. Fügen Sie di...

Anwendungsbeispiele für die try_files-Direktive von Nginx

Die Konfigurationssyntax von Nginx ist flexibel u...

React useEffect verstehen und verwenden

Inhaltsverzeichnis Vermeiden Sie sich wiederholen...

jQuery implementiert Akkordeon-Kleinbuchstaben

Dieser Artikel gibt Ihnen den spezifischen Code v...

Einführung in ApplicationHost.config (IIS-Speicherkonfigurationsbereichsdatei)

Nehmen Sie für eine neu erstellte Website ASP.NET...

Nginx verwendet Lua+Redis, um IP dynamisch zu blockieren

1. Hintergrund Bei unserer täglichen Website-Wart...

Beispielcode zum Mischen von Float und Margin in CSS

Bei meinen letzten Studien habe ich einige Layout...

Implementierungsprinzip der MySQL MyISAM-Standardspeicher-Engine

Standardmäßig generiert die MyISAM-Tabelle drei D...

MySQL-Optimierung: So schreiben Sie hochwertige SQL-Anweisungen

Vorwort Im Internet gibt es zahlreiche Informatio...

Acht Regeln für effektive Webformulare

Wenn Sie Informationen von Ihren Benutzern sammel...