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

Probleme und Vorsichtsmaßnahmen beim Festlegen von maxPostSize für Tomcat

1. Warum maxPostSize festlegen? Der Tomcat-Contai...

Lassen Sie uns über die Leistung von MySQLs COUNT(*) sprechen.

Vorwort Im Grunde verwenden Programmierer am Arbe...

Detaillierte Schritte zur Yum-Konfiguration des Nginx-Reverse-Proxys

Teil.0 Hintergrund Die Intranetserver des Unterne...

Detaillierte Erläuterung der Nginx-Zugriffsbeschränkungskonfiguration

Was ist die Nginx-Zugriffsbeschränkungskonfigurat...

Einfache Methode zur Installation von MySQL unter Linux

Bei der Onlinesuche nach Methoden zur Installatio...

Der Unterschied zwischen z-index: 0 und z-index: auto in CSS

Ich habe vor Kurzem etwas über Stapelkontexte gel...

Detaillierte Erläuterung des MySQL-Clusterindex und des Nicht-Clusterindex

1. Clustered-Index Tabellendaten werden in der Re...

So legen Sie die Anzahl der MySQL-Verbindungen fest (zu viele Verbindungen)

Während der Verwendung von MySQL wurde festgestel...

So optimieren Sie MySQL-Indizes

1. Wie MySQL Indizes verwendet Indizes werden ver...

Grafisches Tutorial zur Offline-Installation und Konfiguration von MySQL 8.0.2

Die Offline-Installationsmethode von MySQL_8.0.2 ...