옵저버 패턴(Observer Pattern) (3/3) - Observer 패턴 변경 확장옵저버 패턴(Observer Pattern) (3/3) - Observer 패턴 변경 확장

Posted at 2013.11.27 14:38 | Posted in == JAVA ==/Design Patterns



facebook에 글올리기



옵저버 패턴 (Observer Pattern) (2/3)


옵저버 패턴(Observer Pattern)(1/3) - java.util.Observable

옵저버 패턴(Observer Pattern) (2/3) - Observer 패턴 직접 구현  에 이이서 포스팅 한다.


4. Observer 패턴의 변경 및 확장


앞에서 JAVA 내장 API java.util.Observable 을 사용한 옵저버 패턴 구현과, 직접 인터페이스를 사용한 구현 두가지를 확인했다. 이제 이번 포스팅에서는 구현한 옵저버 패턴의 변경 및 확장을 어떻게 하면 되는지 알아본다.

아마 앞의 두 포스트를 잘 이해한 사람들은 어떻게 해야 될지 쉽게 머리속에 떠오를 것이다.


인터페이스를 구현한 옵저버패턴 UML이다.




다시 이야기하면, 기상스테이션(WeatherStation)에서 주기적으로 측정한 온도, 습도, 기압 정보를 WeatherData에 전달한다. WeatherData는 새로운 데이터를 받으면 Observer로 등록되어 있는 CurrentConditionDisplay와 ForecastDisplay에 새로운 데이터를 전달한다.

CurrentConditionDisplay와 ForecastDisplay는 새로 전달받은 데이터를 화면에 출력한다.




새로운 Observer 추가


여기서 새로운 Display 장비를 확장해보겠다.

어렵지 않다. Observer 와 DisplayElement를 implements 해서, update() 와 display() 메소드를 구현하고, 생성자에서 Observable에 Observer로 등록하면 된다.

이게 끝이다. 새로운 옵저버가 등록되었기에, 이후에 WeatherData는 새로운 옵저버에게도 데이터를 보낸다.


StaticsDisplay.java 를 추가해보자.




StaticsDisplay.java


새로운 Display 장비인 StaticsDisplay.java 를 추가했다.

이게 전부이다. 이제 기상스테이션에서 WeatherData에 데이터를 던져주면, StaticsDisplay도 데이터를 받게 된다.


WeatherStation을 실행해보자. ( 생성자에서 StaticsDisplay 객체 생성도 해줘야 한다. )


WeatherStation.java




WeatherStation을 실행하여 WeatherData에 데이터를 전송할때, StaticsDisplay도 데이터를 받아 값을 출력한다.


Observable을 implements 한 WeatherData는 기상스테이션으로 부터 전달받은 데이터를 옵저버에게 전달해준다.


온도, 습도, 기압 외에 추가적인 데이터를 전달하려면, WeatherData에 변수를 추가하고, 그 변수를 사용할 Display 장비에서 활용하면 된다.


WeatherData가 아닌 다른 종류의 Observable을 만들고 싶으면 Observable 인터페이스를 구현하면 된다. 

그리고 디스플레이 장비에서는 해당 클래스에 addObserver() 를 사용해 옵저버로 등록해주면, 이 새로운 Observable 클래스로 부터 데이터를 전달 받을 수 있다.



옵저버 구조를 잘 이해하고 있다면, 변경 및 확장이 어렵지 않을 것이다.

소스 코드를 첨부했으니, 필요하면 다운받아서 확인하면 될 것이다.



소스코드 첨부



PatternObserver.zip



옵저버 패턴(Observer Pattern) (3/3) - Observer 패턴 변경 확장


옵저버 패턴(Observer Pattern) (2/3) - Observer 패턴 직접 구현


옵저버 패턴(Observer Pattern)(1/3) - java.util.Observable






이웃추가
facebook에 글올리기
  1. 이용약관위배로 관리자 삭제된 댓글입니다.

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기