Head First 디자인 모델 의 관찰자 모델
수요 분석:
기상 관측소 에서 수집 한 데 이 터 는 세 개의 게시판 에 전시 하 는 데 사 용 됩 니 다. 이러한 시스템 을 설계 하여 우리 가 원 하 는 기능 을 완성 하 십시오. 기상 데이터 가 변화 할 때 즉시 세 개의 게시판 에 데 이 터 를 업데이트 하 라 고 통지 하 십시오.우리 가 있 는 이곳 의 기상 관측소 가 바로 게시 자 이 고, 세 개의 게시판 이 바로 구독 자 이다.
디자인 아이디어:
1. 기상 관측소 류 를 설계 하고 그 안에 각종 기상 데 이 터 를 저장 합 니 다.
2. 서로 다른 게시판 을 디자인 하여 데 이 터 를 표시 하고 통 일 된 데이터 업데이트 방법 을 디자인 하여 데이터 디 스 플레이 를 업데이트 하 는 데 사용 합 니 다.
3. 기상 관측소 류 에서 구독 자 관리 방법 을 제공 하고 모든 구독 자의 대상 인 스 턴 스 를 저장 하 며 데이터 가 변 할 때 게시 자 는 데 이 터 를 구독 자 에 게 하나씩 알 리 고 구독 취소 방법 을 제공한다.
코드 구현:
1. 게시 자 정의
// Observable
public class WeatherData extends Observable{
//
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();
}
// pull
public float getTemperature(){
return this.temperature;
}
public float getHumidity(){
return this.humidity;
}
public float getPressure(){
return this.pressure;
}
}
2. 구독 자 정의
public class CurrentConditionDisplay implements Observer, DisplayElement{
Observable observable;
private float temperature;
private float humidity;
public CurrentConditionDisplay(Observable observable){
this.observable = observable;
//
observable.addObserver(this);
}
public void update(Observable obs, Object arg){
if(obs instanceof WeatherData){
WeatherData weatherData = (WeatherData)obs;
// pull
this.temperature = weatherData.getTemperature();
this.humidity = weatherData.getHumidity();
display();
}
}
}
장점:
1. 데이터 가 바 뀌 면 구독 자 에 게 직접 알려 줍 니 다.
2. 자동 pull 의 방법 은 유연성 을 제공한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Head First 디자인 모델 의 관찰자 모델관찰자 모드: 게시 - 구독 모드 라 고도 합 니 다.게시 자의 데이터 가 바 뀌 었 을 때 모든 구독 자 에 게 변 화 를 알려 야 합 니 다.신문 구독 과 비슷 하 게 신문 사 는 게시 자 이 고 독 자 는 구독...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.