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');