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. 조합을 많이 사용하고 계승을 적게 한다. 
관찰자 모델은'조합'을 이용하여 많은 관찰자를 주제에 조합하는데 대상 간의 이런 관계는 계승을 통해 생기는 것이 아니다.운행할 때 조합하는 방식을 이용하여 만들어진 것이다.
 
 
 
 
 
 
 
 
 
 
 
 
 

좋은 웹페이지 즐겨찾기