๐ ๋ชฉ์ฐจ
- Introduction
- What is Observer Pattern?
- Implementation
- Conclusion
- Reference
๐ Introduction
์๋ ํ์ธ์. ์ด๋ฒ ํฌ์คํ ์์๋ Observer Pattern์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๐ What is Observer Pattern?
์ต์ ๋ฒ ํจํด์ ๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ๊ด์ฐฐ ํ๋ ๊ด์ฐฐ์๋ฅผ ๋ฑ๋กํ์ฌ ์ํ ๋ณํ๊ฐ ์์๋ noti๋ฅผ ์ฃผ๋ ๋์์ธ ํจํด์ ๋๋ค.
๐ Implementation
๋จผ์ subjectํด๋์ค๋ฅผ ์ ์ ํด๋ณด๊ฒ ์ต๋๋ค.
class Subject {
constructor() {
this.observers = [];
return this;
}
addObserver(observer) {
this.observers.push(observer);
return this;
}
removeObserver(observer) {
this.observers = this.observers.filter((ob) => ob !== observer);
return this;
}
notifyObservers(data) {
this.observers.forEach((observer) => {
observer.notify(data);
});
}
}
๊ฐ๋จํ๊ฒ observer์ ๋ชฉ๋ก์ ๋ฐ์ ์ ์๊ณ ์ง์ธ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ notifyObservers๋ฅผ ํตํด ๊ฐ๊ฐ์ observer๋ค์๊ฒ noti๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
const subject = new Subject();
const observer1 = { notify: (data) => console.log(`First: ${data}`) };
const observer2 = { notify: (data) => console.log(`Second: ${data}`) };
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.notifyObservers("HELLO");
// RESULT:
// First: HELLO
// Second: HELLO
์ด๋ ๊ฒ ํด๋น observer๋ค์๊ฒ notify๋ฅผ ์ค ์ ์์ต๋๋ค.
๐ Conclusion
Observer ํจํด์ pusher์ ๊ฐ์ ์ค์๊ฐ์ ์ค์์ ํ๋ ๊ฒ๋ค์ ๋ํด ๋ง์ ๊ด๋ฆฌ ๊ถํ์ ๋ถ์ฌ ํ ์ ์์ต๋๋ค. ํนํ ํ์ฌ์์ ์ฐ๋ pusher๋ฅผ Observer ํจํด์ผ๋ก ๊ด๋ฆฌ๋ฅผ ํด์ฃผ์ด์ ์ฝ๊ฒ vuex์ ๊ฐ๋ค์ ์ ํด ์ฃผ๊ณค ํฉ๋๋ค.
๐ Reference
'Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Mixin Pattern (0) | 2022.01.20 |
---|---|
Mediator Pattern (0) | 2020.10.23 |
Module Pattern (0) | 2020.10.07 |
Singleton Pattern (0) | 2020.10.05 |
Constructor Pattern (0) | 2020.09.24 |