카테고리 없음

[자바스크립트 디자인 패턴] 옵저버 패턴

심심한 낙지 2019. 8. 18. 02:57

POOPOO: 배변 일기 앱

SMALL

목록


상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 사용합니다.

  1. Subject, Observer 를 선언합니다
    - Subject : 변경과 감지를 통보하여 Observer들을 관리하는 역할
    - Observer : 변경과 감지를 통보받는 역할

작성코드

var Subject = function() {
    var observers = [];
    
    return {
        subscribeObserver: function(observer) {
            observers.push(observer);
        },
        unsubscribeObserver: function(observer) {
            var index = observers.indexOf(observer);
            if(index > -1) {
                observers.splice(index, 1);
            }  
        },
        notifyObserver: function(observer) {
            var index = observers.indexOf(observer);
            if(index > -1) {
                observers[index].notify(index);
            }
        },
        notifyAllObservers: function() {
            for(var i = 0; i < this.observers.length; i++){
                observers[i].notify(i);
            };
        }
    }
}
var Observer = function() {
    return {
        notify: function(index) {
            console.log("Observer " + index + " is notified!");
        }
    }
}

 

사용코드

// Subject 객체 생성
var subject = new Subject();

// Observer 객체 생성
var observer1 = new Observer();
var observer2 = new Observer();
var observer3 = new Observer();
var observer4 = new Observer();

// Subject 객체 생성
subject.subscribeObserver(observer1);
subject.subscribeObserver(observer2);
subject.subscribeObserver(observer3);
subject.subscribeObserver(observer4);

// Observer 2번에 통보
subject.notifyObserver(observer2);

// Observer 전체에 통보
subject.notifyAllObservers();
LIST