JavaScript: Das Observer-Design-Pattern

Abhängige Komponenten können mit Hilfe des Observer-Design-Pattern in JavaScript über Änderungen in einem Objekt informiert werden. Wir zeigen Ihnen zwei mögliche Ansätze.

Das Observer-Design-Pattern ist ein wichtiger Ansatz in der Softwareentwicklung, um Änderungen in einem Teil der Anwendung an andere Teile zu kommunizieren. In AngularJS beispielsweise kann das $scope-Objekt Änderungen auslösen und so andere Komponenten benachrichtigen. Dieses Muster ermöglicht es, abhängige Objekte über Änderungen zu informieren. Ein weiteres Beispiel ist die Model-View-Controller (MVC)-Architektur, bei der die Ansicht (View) aktualisiert wird, wenn sich das Modell (Model) ändert. Ein großer Vorteil dieses Musters besteht darin, die Ansicht von den Modellen zu entkoppeln und die Abhängigkeiten zu verringern.

Die Schlüsselkomponenten des Observer-Design-Pattern

Im Observer-Design-Pattern gibt es drei Schlüsselkomponenten: Das beobachtete Objekt (subject), der Beobachter (observer) und konkrete Beobachterobjekte. Das beobachtete Objekt enthält Verweise auf die konkreten Beobachter, um sie über Änderungen zu benachrichtigen. Das Beobachterobjekt ist eine abstrakte Klasse, die es den konkreten Beobachtern ermöglicht, die Benachrichtigungsmethode (notify) zu implementieren.

Beispiel in AngularJS

In AngularJS kann das Observer-Design-Pattern durch die Verwaltung von Ereignissen veranschaulicht werden. Zum Beispiel:

// Controller 1
$scope.$on('nameChanged', function(event, args) {
    $scope.name = args.name;
});

// ...

// Controller 2
$scope.userNameChanged = function(name) {
    $scope.$emit('nameChanged', {name: name});
};


Hier werden Änderungen im Namen über das $emit-Event ausgelöst und von anderen Controllern abgefangen.

Eigenes Implementieren von Subjects und Observers

In JavaScript können wir unsere eigenen Subjects und Observers erstellen. Hier ist eine einfache Implementierung:

var Subject = function() {
    this.observers = [];

    return {
        subscribeObserver: function(observer) {
            this.observers.push(observer);
        },
        // Weitere Methoden: unsubscribeObserver, notifyObserver, notifyAllObservers
    };
};

var Observer = function() {
    return {
        notify: function(index) {
            console.log("Observer " + index + " is notified!");
        }
    };
}

Publish/Subscribe als Alternative

Das Publish/Subscribe-Muster ist eine alternative Methode, bei der zwischen Objekten, die Benachrichtigungen erhalten möchten (Abonnenten), und dem Objekt, das das Ereignis auslöst (Publisher), ein Thema/Ereigniskanal besteht. Dieses System ermöglicht es, anwendungsspezifische Ereignisse zu definieren, die benutzerdefinierte Argumente übermitteln können. Im Gegensatz zum Observer-Muster implementiert jeder Abonnent beim Publish/Subscribe-Muster einen geeigneten Ereignishandler, um sich für und den Empfang von Themenbenachrichtigungen durch den Publisher zu registrieren.

In AngularJS können Abonnenten Ereignisse mit `$on(‚event‘, callback)` abonnieren und Publisher verwenden `$emit(‚event‘, args)` oder `$broadcast(‚event‘, args)` zum Auslösen von Ereignissen.

Es ist wichtig zu beachten, dass das Observer-Design-Pattern viele Vorteile und Nutzen bietet, aber auch Nachteile wie Leistungseinbußen, insbesondere bei einer großen Anzahl von Beobachtern. Deshalb sollte die Wahl zwischen Observer und Publish/Subscribe je nach den Anforderungen und der Komplexität des Projekts getroffen werden.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren:

centron Managed Cloud Hosting in Deutschland

Java-Array: So prüfst du Werte effizient

JavaScript
Wie prüft man, ob ein Java Array einen Wert enthält? Es gibt viele Möglichkeiten, um zu überprüfen, ob ein Java Array einen bestimmten Wert enthält. Einfache Iteration mit einer for-Schleife…