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 des MySQL-Installationsdiagramms

Grafisches Tutorial zur Installation und Konfigur...

So setzen Sie das MySQL-Root-Passwort zurück

Inhaltsverzeichnis 1. Ich habe das Root-Passwort ...

Serviceverwaltung der Quellpaketinstallation unter Linux

Inhaltsverzeichnis 1. Startverwaltung des Quellpa...

Ausführliche Erläuterung des globalen Status des WeChat-Applets

Vorwort Im WeChat-Applet können Sie globalData vo...

Vue + Element zur dynamischen Anzeige von Hintergrunddaten zu Optionen

brauchen: Implementieren Sie die dynamische Anzei...

Analyse des GTK-Treeview-Prinzips und der Verwendung

Die GtkTreeView-Komponente ist eine erweiterte Ko...

Über die richtige Art und Weise der Zeitumrechnung in JS beim Excel-Import

Inhaltsverzeichnis 1. Grundlagen 2. Problembeschr...

MySQL verwendet UNIQUE, um das Einfügen nicht doppelter Daten zu implementieren

SQL UNIQUE-Einschränkung Die UNIQUE-Einschränkung...

VUE implementiert eine Timeline-Wiedergabekomponente

In diesem Artikelbeispiel wird der spezifische Co...

Vue.js verwaltet die Kapselung von Hintergrundtabellenkomponenten

Inhaltsverzeichnis Problemanalyse Warum Kapselung...

So installieren und konfigurieren Sie WSL unter Windows

Was ist WSL Zitat aus der Baidu-Enzyklopädie: Das...