옵저버 패턴은 (Model-View-Controller, MVC) 패러다임과 자주 결합된다. 옵저버 패턴은 Model과 View 사이에서 느슨히 연결하기 위해 사용된다.
수정된 데이터 반영하는 부분에서 옵저버 패턴을 구현하면 느슨하게 객체들을 결합할 수 있다.
문제점
public class WeatherData {
private CurrentConditionsDisplay currentConditionsDisplay;
private StatisticsDisplay statisticsDisplay;
private ForecastDisplay forecastDisplay;
public void measurementsChanged() {
float temp = getTemperature();
float humidity = getHumidity();
float pressure = getPressure();
// 문제 영역
currentConditionsDisplay.update(temp, humidity, pressure);
statisticsDisplay.update(temp, humidity, pressure);
forecastDisplay.update(temp, humidity, pressure);
}
}
위 코드에서 WeatherData가 직접 디스플레이를 참조해서 직접 화면을 갱신해준다.
문제는 디스플레이가 추가된다면? 멤버변수도 추가
해야하고 디스플레이를 직접 업데이트 시켜줘야한다.
업데이트 부분을 만약 개발자가 적지않거나 특정 디스플레이는 업데이트 안한다고하면 또 직접 코드를 수정해야 한다. OCP를 위반한다.
위 코드에서 크게 변하지 않을 부분은 데이터를 가져오는 부분이다. 밑에 업데이트하는 부분을 옵저버 패턴으로 변경해야 한다.