옵저버패턴2
옵저버 패턴
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