[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: