mediator 와 observer 의 차이는

 

observer 는 중심이 되는것이 밖에 있는 것들 즉 중계자가 중심이 되는 것이 아니고

 

중계자가 아닌 밖의 옵저버들이 대한 변경 사항을 subject(중계자) 에게 알리면 변경사항을 나머지 옵저버들에게 알려주는 것이

 

Observer pattern


 

 

A 의 오브젝트 변경사항을 나머지에도 적용 시키는 패턴

 

중간에 Subject 가 이를 반영한다

 

 

 

원래 처음 주어진 환경이 이런 환경

 

 

A(observer object) 에서 변경된 부분을  Subject  에게 전달해주고

 

Subject 는 A 가 업데이트 됐다면 Subject 가 A 에서 읽어와 나머지 오브젝트들(observer objects)에게 변경사항을 알려주는 것

 

 

switch 를 피하기 위해 동일한 인터페이스 사용

 

 

 

 

 

subject 클래스는 내부적으로 observer objects 를 리스트로 관리할뿐 구체적으로 어떤 observer object 들인지는 관여하지 않는다

=> 즉 동일한 인터페이스를 갖는다

 

 

서로 업데이트 하려고 하는 경우 같은 정보로 변경할 경우 subject 에서 정볼르 받아 쌓아놨다가 이전에 바꿨던것과 동일한가를 비교

 

이렇게 알려주려면 알려주기 위한 클래스를 생성 해야 한다

 

 

subject 가다른 observer objects 와 동일한 데이터 일경우 싱글톤으로 만들 수도 있다

 

 

subject 가 여러개가 있고 observer 가 여러개 있을 수 있다

 

 

 

업데이트시 this  를 넘겨줌

 

 


 

 

subject 가 소멸되는 경우 각 observer objects 들은 소멸 하거나 어떤 처리를 해야 함

 

 

 

setstate() 함수 호출의 순서를 조절할 수 있는 것이 themplate method 패턴을 참고

=> subject 에서 값변환 먼저 실행후 notify 실행, 각 옵저버 객체에서도 동일하게 추가 되야 함

 

 

 

-특정 값이 바뀌었을때는 subject 에 클래스를 미리 등록 시켜 놓고 관심 있는 옵저버 클래스에게만 알려 효율 올림

 

 

 

-


 

 

 

오브젝트 N 개 서브젝트 M 개 일때

 

중간에 change manager 를 두고 이 사이를 관리할 수도 있음

 

change manager 를 상속 받는 manager 의 종류를 또 분류하여, 변경사항을 다 통보해주는 매니저로 갈지

 

변경사항이 연관있는 옵저버오브젝트들에게만 알릴지를 정할 수도 있다( 전자의 경우 mediator 와 유사)

 


 

 

한 노드가  subject 와 observer 역할을 둘다 할 수도 있다

 

옵저버가 다른 옵저버와 연결 되는 경우

 

1. 다중상속

2. 다중상속이 힘든 환경이면 subject ,observer 클래스를 따로 구현 하지 않고 하나로 두어 구현

 

 

 

 


 

 

 

 

스트크래프트 미니 맵에서 적은 안보이고 우리만 보이는 상황

 

전체 오브젝트에 대해서 서브젝트가 가지고 있는데

 

Subject 에서 A편, B 편, 관람자들의 리스트를 따로 가지고 있어서

 

연관된 사람들에게만 오브젝트 위치를 보여준다

 

 

반응형

'디자인패턴과방법론 > 디자인패턴' 카테고리의 다른 글

strategy 패턴  (0) 2012.11.02
state 패턴  (0) 2012.11.02
memento 패턴  (0) 2012.11.02
iterator 패턴, 스택제거시 삭제되는 포인터(like 스마트포인터)  (0) 2012.11.02
interpreter 패턴  (0) 2012.11.02

+ Recent posts