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

Beispiel für die Verwendung von #include-Dateien in HTML

Es gibt zwei Dateien a.htm und b.htm. Im selben Ve...

Docker-Bereinigungsumgebungsvorgang

Beginnen Sie vorsichtig mit der Reinigung! Auflis...

Verwendung des Linux-Datumsbefehls

1. Befehlseinführung Mit dem Datumsbefehl wird di...

Beispiel für einen reinen CSS3-Mindmap-Stil

Mindmap Er sieht wahrscheinlich so aus: Die meist...

So verwenden Sie Binlog zur Datenwiederherstellung in MySQL

Vorwort Kürzlich wurden Daten online falsch bearb...

Detaillierte Erläuterung der Angular-Routing-Unterrouten

Inhaltsverzeichnis 1. Subroutensyntax 2. Beispiel...

So verhindern Sie mit Nginx die böswillige Auflösung von IP-Adressen

Zweck der Verwendung von Nginx Lassen Sie uns zun...

Detailliertes Installationstutorial von Docker unter CentOS

Docker ist in CE und EE unterteilt. Die CE-Versio...

So erstellen Sie ein ELK-Protokollsystem basierend auf Docker

Hintergrundanforderungen: Mit zunehmender Größe d...

Linux löscht automatisch Protokolle und Beispielbefehle von vor n Tagen

1. Befehl zum Löschen von Dateien: Suche das ents...