-
[수정중] 헤드퍼스트 디자인 패턴 [2]Development/디자인 패턴 2018. 1. 2. 01:04
헤드퍼스트 디자인 패턴[2]
- 옵저버 패턴
기상 스테이션에서 값을 가져와서 화면에 뿌려주는 객체, 중계자 객체를 만들어야함.
현재상태: 온도, 습도, 기압을 화면에서 바로볼 수 있게...
WeatherData 클래스에는 세가지 측정값(온도, 습도, 기압)을 갖고오는 getter가 있다.
새 값을 갖고오면 measurementChanged() 가 호출됨.
디스플레이 3개 구현해야함. 1번: 기상통계, 2번: 현재상태, 3번: 기상예보
**확장성을 고려한 구현을 해야함!**
-> 신문구독 메커니즘으로부터 아이디어를 캐치! 출판사를 Subject, 구독자를 Observer라고 부른다고 했을 때...
subject 객체가 데이터를 관리... subject의 데이터가 달라지면 observer에게 해당 소식을 전달.
observer 객체는 subject 객체를 구독하고있으며( subject 객체에 등록됨), 만일 subject의 내용이 바뀌면 갱신된 내용을 전달받음.
이것이 바로 옵저버 패턴!
옵저버 패턴: 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고 자동으로 내용이 갱신되는 방식. 일대다(one-to-many) 의존성을 정의한다.
concretesubject는 subject 인터페이스를 구현한다.
각 subject마다 여러개의 observer가 있을 수 있다.
두 객체가 느슨하게 결합되어있다는 것: 그 둘이 서로 상호작용을 하긴 하지만 서로에 대해 잘 모른다는 것을 뜻함.
옵저버 패턴은 loose coupling을 제공함!
- 옵저거 추가제외가 쉽다. 옵저버 교체도 쉽다.
- 새 옵저버 추가도 쉽다.
- 옵저버따로 subject따로 구현이 가능하다.
- 각자 바뀌더라도 서로에게 영향을 미치지 않는다.
------------------------------------------------------------------------------------
| 디자인 원칙 - 4 서로 상호작용을 하는 객체 사이에서는 loose coupling design을 사용해야한다. |
------------------------------------------------------------------------------------
subject를 인터페이스로 만듦.
observer도 인터페이스로 만듦.
displayElement로 측정값을 바탕으로 별도구현이 가능하게 하도록 분리
WeatherData (implements Subject)
소스코드의 주석으로 다시 이해하기.
'Development > 디자인 패턴' 카테고리의 다른 글
[수정중] 헤드퍼스트 디자인 패턴 [6] (0) 2018.01.02 [수정중] 헤드퍼스트 디자인 패턴 [5] (0) 2018.01.02 [수정중] 헤드퍼스트 디자인 패턴 [4] (0) 2018.01.02 [수정중] 헤드퍼스트 디자인 패턴 [3] (0) 2018.01.02 [수정중] 헤드퍼스트 디자인 패턴 [1] (0) 2018.01.02