Design Pattern
※他サイトを参照
Observer Pattern
class Subject {
constructor() {
this.observers = [];
}
add(observer) {
this.observers.push(observer);
}
notify(...args) {
this.observers.forEach(observer => observer.update(...args));
}
}
class Observer {
update(...args) {
console.log(...args);
}
}
let ob1 = new Observer();
let ob2 = new Observer();
let sub = new Subject();
sub.add(ob1);
sub.add(ob2);
sub.notify('Fire');
Pub/Sub Pattern
class PubSub {
constructor() {
this.subscribers = [];
}
subscribe(topic, callback) {
let callbacks = this.subscribers[topic];
if (!callbacks) {
this.subscribers[topic] = [callback];
} else {
callbacks.push(callback);
}
}
publish(topic, ...args) {
let callbacks = this.subscribers[topic] || [];
callbacks.forEach(callback => callback(...args));
}
}
let pubSub = new PubSub();
pubSub.subscribe('SMS', console.log);
pubSub.subscribe('SMS', console.log);
pubSub.publish('SMS', 'Fire');