Head First Java 디자인 모드 - 관찰자 모드
2807 단어 독서 노트
그 중 3개의 get 방법은 각각 온도, 습도, 기압을 얻고mentsChanged 방법은 기상 데이터가 업데이트되면 호출된다.정상적인 것은 일반적으로 다음과 같은 방법으로 사용할 수 있지만,
public class WeatherData {
public void measurementsChanged() {
float temp = getTemperature();
float humidity = getHumidity();
float pressure = getPressure();
// 3
currentConditionsDisplay.update(temp, humidity, pressure);
statisticsDisplay.update(temp, humidity, pressure);
forecastDisplay.update(temp, humidity, pressure);
}
}
그러나 게시판의 업데이트 함수를 직접 호출합니다. 프로그래밍을 위한 것입니다. 앞으로 게시판을 추가하거나 삭제할 때 프로그램을 수정해야 합니다.관찰자 모드를 사용하여 다음과 같이 프로그래밍합니다.
1. WeatherData에서 테마 인터페이스 구현
public class WeatherData implements Subject {
private ArrayList observers;
private float temperature;
private float humidity;
private float pressure;
public WeatherData() {
observers = new ArrayList();
}
public void registerObserver(Observer o) {
observers.add(o);
}
public void removeObserver(Observer o) {
int i = observers.indexOf(o);
if(i >= 0) {
observers.remove(i);
}
}
public void notifyObserver(Observer o) {
for(int i=0; i
2. 게시판 구축:
public class CurrentConditionsDisplay implements Observer, DisplayElement {
private float temperature;
private float humidity;
private Subject weatherData;
public CurrentConditionsDisplay(Subject weatherData) {
this.weatherData = weatherData;
weatherData.registerObserver(this);
}
public void update(float temperature, float humidity, float pressure) {
this.temperature = temperature;
this.humidity = humidity;
display();
}
public void display() {
//
}
}
관찰자 모드라는 장에서 두 가지 설계 원칙을 언급했다.
1. 프로그램에서 바뀔 수 있는 부분을 찾아내고 고정불변의 부분과 분리한다.
관찰자 모드에서 주제의 상태와 관찰자의 수와 유형이 바뀐다.이 모드를 사용하면 테마 상태에 의존하는 대상을 바꿀 수 있지만 테마를 바꿀 필요는 없다.미리 기획하는 거야.
2. 디자인 원칙은 인터페이스에 대한 프로그래밍이고 구체적으로 프로그래밍을 실현하지 않는다.
주제와 관찰자는 모두 인터페이스를 사용한다. 관찰자는 주제의 인터페이스를 이용하여 주제를 등록하고 주제는 관찰자의 인터페이스를 이용하여 관찰자에게 통지한다.이렇게 하면 둘 사이를 정상적으로 운행할 수 있을 뿐만 아니라, 동시에 느슨한 결합을 가진 점도 있다.
3. 조합을 많이 사용하고 계승을 적게 한다.
관찰자 모델은'조합'을 이용하여 많은 관찰자를 주제에 조합하는데 대상 간의 이런 관계는 계승을 통해 생기는 것이 아니다.운행할 때 조합하는 방식을 이용하여 만들어진 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로그'메타프로그램 루비 버전 2'3장 읽기동적 방법 Object#send 호출 방법은 약간 메모와 Object#send obj.send(:my_method, 3) Object#send를 사용하면 어떤 방법으로든 호출할 수 있습니다. privete 방법을 호...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.