[Design Pattern] Observer Pattern

Observer Pattern 

: 한 객체 (subject)에서 state에 변화가 발생했을 때, observer라는 독립된 리스트를 사용하여 자동으로 변화를 알리는 (notify) 패턴이다.

어떤 문제에 적합한 패턴인가?


  • 일대 다 (one to many) 의존 관계에서 object 사이 관계는 결합도를 높이지 않고 연결할 때 (loose coupled)
  • 한 객체의 변화를 자동적으로 여러개의 다른 객체에 통보할 때 

구조

Subject1 객체의 변화를 Observer 패턴을 통해 통보 대상 클래스와의 의존성을 만들지 않고 통보 할 수 있다. 즉, 통보 대상이 되는 대상 객체의 변경이 생겨도 Subject 클래스는 수정 없이 사용할 수 있다. 


  • Subjecct 
    • ConcreteObserver 객체를 관리하는 요소
    • Observer 인터페이스를 참조해서 ConcreteObserver를 관리하므로 ConcreteObserver의 변화에 독립적이다
  • Observer
    • 데이터의 변경을 통보 받는 인터페이스
    • Subject에서는 Observer 인터페이스의 update 메서드를 호출함으로써 ConcreteSubject의 데이터 변경을 ConcreteObserver에 통보한다.
  • ConcreteSubject
    • 변경 관리 대상이 되는 데이터를 가지고 있는 클래스 (통보 클래스)
    • 데이터 변경을 위한 메서드 setState() 를 가진다
    • setState는 자신의 데이터 subjectState를 변경하여 Subject의 notifyObservers 메서드를 호출해 ConcreteObserver 객체에 변경을 통보한다.
  • ConcreteObserver
    • ConcreteSubject의 변경을 통보받는 클래스
    • Observer 인터페이스의 update 메서드를 구현함으로써 변경을 통보받는다. 
    • 변경된 데이터는 ConcreteSubject의 getState 메서드를 호출함으로써 변경을 조회한다.

No comments:

Powered by Blogger.