개발이슈/디자인패턴

옵저버패턴2

kalkin 2013. 10. 31. 14:08


firstStation.zip

옵저버 패턴

 


ppt1.

옵저버패턴이 뭐지?


스타크래프트의 그 옵저버랑 관계가 있나??????



옵저버 패턴은 

한객체의 변화된 상태를 다른 객체들에게  알려줘야할때 이  패턴을 쓴다.



구글링 해보면, 

옵저버 패턴에 대해서 다음과 같이 정의를 하고 있다.


한 객체의 상태를 정해지지 않은 임의의 객체에게 변경사실을 알려준다.

한객체의 상태가 바뀌면 그 객체에 의존하는 다른객체들한테 연락이 자동으로 된다.

 


저 말만 들어서는 감이 안잡힐 수도 있는데, 옵저버 패턴을 설명할때 많이 설명하는 대표적인예들 몇가지를 보면

이해가 금방 갈것이다.


예를들어, 

1.신문사와 신문구독자사와의 관계 (신문사의 데일리 신문을 주제객체, 구독자들은 옵저버 객체 :새로운 신문이 나오면 구독자들은 뉴스를 본다)나, 

2.gui프로그래밍에서 버튼이 클릭될때의 상황

3. 도난방지 시스템, 등  광범위하게 이 패턴을 적용 할 수 있다.

4. 화재발생시 소방 시스템

 


이 패턴의 특징은, 


1. 구독 객체(옵저버)가   주제 객체에 의존적이며,

 

2.. 대부분 주제 객체에서 옵저버 패턴에게 상태변화를 알려주는 형식을 취하며, 


3. 1:n관계다 (주제:옵저버)

 

4. 구독객체와 주제 객체는 느슨한 연결이어야 한다.

 


사실 옵저버 객체는  추가 및 삭제가  이루어 질수 있는 가능성이 많은데, 


이때 주제객체에 소스 변화는 이루어 지지 않아야 한다.(이루어질수도있겠지만..)

 

옵저버 객체가 추가되면 메인메소드나, 기타 메소드에 옵저버로 등록만 되도록 설계..

 

 



 

옵저버 패턴의 예로 화재발생시 각 팀에게 알려주는 시스템을 구현해보았다.


그림1.클래스 관계

보안땜에..그림이 안올라감...






전체적인 흐름은 


소방call센터에서는 소방시스템(subject)을 상속받아


팀 등록 및 삭제, 경보를 발생한다.


경보 발생시, 소방시스템에 등록되어있는  각 소방팀(observer)들은 화재발생(notify)시 


연락을 받고 출동(do_action())을 한다.




 //옵저버 객체 생성

 



 


Fire_Check_Subject.class

main class