본문

160209P(화) - Head First Disign Patterns (Observer Pattern)

Head First Disign Patterns - Observer Pattern


옵저버 패턴(Observer Pattern)

- 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다.

- 보통 subject interface, observer interface 를 바탕으로 한다.


디자인 원칙 [

Loose coupling

· 서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다.

]


※ Observer를 implementaion한 class에서 subject에 관한 reference를 가지고 있으면 탈퇴 등에 유용하게 쓰일 수 있다.


푸시 방식

subject가 observer에게 데이터를 보내는 방식


풀 방식

observer가 subject의 데이터를 마음대로 가져가는 방식


자바 내장 옵저버 패턴

- java.util.observable 클래스

- subject에서 extends해서 사용

1. setChanged()를 호출해서 객체의 상태가 바뀜을 알린다.

2. notifyObservers() 또는 notifyObservers(Object arg) 호출


- java.util.observer interface

- observer에서 implements해서 하용

1. update(Observable o, Object arg) 호출


단점

1. Observable은 클래스

· 확장성과 재사용성에 문제

· observer와 잘 맞는 클래스의 구현이 거의 불가

· setChanged()가 protected이므로 핵심메소드를 외부에서 호출 불가


Observer에게 연락이 가는 순서는 변할 수 있다. 의존하지 말것.

공유

댓글