Write a function named createObservable that returns an object implementing the Observer pattern.
The object - let's call it observable - should have the following properties:
subscribe - a method used by observers to subscribe to the observable. It should accept 1 parameter:
callback - a function that will be called when we want to notify the observersunsubscribe - a method used by observers to unsubscribe from the observable. It should receive the same callback sent to the subscribe function as parameter
notify - a method used to notify the observers. It should accept 1 parameter:
data - any data that should be passed as parameter to the observers' callback functionsclass User {
name;
weatherObservable;
constructor(name, weatherObservable) {
this.name = name;
this.weatherObservable = weatherObservable;
this.weatherObservable.subscribe(this.onWeatherChange);
}
onWeatherChange = (weatherData) => {
console.log(`${this.name} received weather updates: `, weatherData);
}
stopListening() {
this.weatherObservable.unsubscribe(this.onWeatherChange);
}
}
const weatherObservable = createObservable();
const bob = new User("Bob", weatherObservable);
/**
* Should print:
* Bob received weather updates: { temperature: 20, humidity: 80 }
*/
weatherObservable.notify({ temperature: 20, humidity: 80 });
/**
* Should print:
* Bob received weather updates: { temperature: 25, humidity: 75 }
*/
weatherObservable.notify({ temperature: 25, humidity: 75 });
bob.stopListening();
// Should not print anything, because the user is no longer
// subscribed to the weatherObservable observable.
weatherObservable.notify({ temperature: 22, humidity: 68 });