내장기능을 이용한 옵저버패턴(Observer Pattern) 을 알아보자.
기본 코드는 내장기능을 이용하지 않은 이전 포스팅을 참고하자.
※. 참고 주소 :
https://asterisco.tistory.com/202
01. WeatherData 의 import 두개를 추가하고 Observable 을 상속받고 내용을 조금 수정하자.
02. CurrentConditionsDisplay 클래스의 import를 넣고 Observer 를 다중 상속 받고 내용을 적절하게 수정하자.
03. 실행하면 결과는 같게 나온다.
******************** CurrentConditionsDisplay CLASS
package kr.or.komca.smin;
import java.util.Observable;
import java.util.Observer;
public class CurrentConditionsDisplay implements Observer, DisplayElement{
Observable observable ;
private float temperature;
private float humidity;
public CurrentConditionsDisplay(Observable observable){
this.observable = observable;
observable.addObserver(this);
}
@Override
public void update(Observable obs, Object arg){
if( obs instanceof WeatherData ){
WeatherData weatherData = (WeatherData) obs;
this.temperature = weatherData.getTemperature();
this.humidity = weatherData.getHumidity();
display();
}// if
}// update
@Override
public void display() {
// 변수에 저장된 값을 나타내어 준다.
System.out.println("Current conditions : " + temperature + " F degree and " + humidity + " % humidity");
}
}// MAIN
******************** WeatherData CLASS
package kr.or.komca.smin;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
public class WeatherData extends Observable{
private ArrayList observers;
private float temperature;
private float humidity;
private float pressure;
public WeatherData(){ }
public void measurementsChanged(){
setChanged();
notifyObservers();
}
public void setMeasurements(float temperature, float humidity, float pressure){
// 값들을 지정해주는 메소드
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
measurementsChanged();
}
public float getTemperature() { return temperature; }
public float getHumidity() { return humidity; }
public float getPressure() { return pressure; }
}//MAIN