Page 143 - JavaScript
P. 143

Chapter 12: Behavioral Design Patterns




        Examples



        Observer pattern


        The Observer pattern is used for event handling and delegation. A subject maintains a collection
        of observers. The subject then notifies these observers whenever an event occurs. If you've ever
        used addEventListener then you've utilized the Observer pattern.


         function Subject() {
             this.observers = []; // Observers listening to the subject

             this.registerObserver = function(observer) {
                 // Add an observer if it isn't already being tracked
                 if (this.observers.indexOf(observer) === -1) {
                     this.observers.push(observer);
                 }
             };

             this.unregisterObserver = function(observer) {
                 // Removes a previously registered observer
                 var index = this.observers.indexOf(observer);
                 if (index > -1) {
                     this.observers.splice(index, 1);
                 }
             };

             this.notifyObservers = function(message) {
                 // Send a message to all observers
                 this.observers.forEach(function(observer) {
                     observer.notify(message);
                 });
             };
         }

         function Observer() {
             this.notify = function(message) {
                 // Every observer must implement this function
             };
         }


        Example usage:


         function Employee(name) {
             this.name = name;

             // Implement `notify` so the subject can pass us messages
             this.notify = function(meetingTime) {
                 console.log(this.name + ': There is a meeting at ' + meetingTime);
             };
         }

         var bob = new Employee('Bob');




        https://riptutorial.com/                                                                             100
   138   139   140   141   142   143   144   145   146   147   148