Observer & Singleton Patterns
What is the proper way to handle memory management in the Observer Pattern?
class WeakSubject {
constructor() {
this.observers = new WeakSet();
}
subscribe(observer) {
if (typeof observer !== 'object' || observer === null) {
throw new Error('Observer must be an object');
}
this.observers.add(observer);
}
notify(data) {
// Convert WeakSet to array for iteration
const currentObservers = Array.from(this.observers);
currentObservers.forEach(observer => {
if (observer.update) {
observer.update(data);
}
});
}
}