디자인 모델 의 2 - 관찰자 모델

3928 단어 관찰자 모드
관찰자 모드 는 2 부분 으로 구성 되 어 있다.   메시지  화해시키다  관찰자
1 테마 인터페이스
package com.observer;

/***
 * 
 * @author shasha
 *       
 */
public interface Subject {

	public void registObserver(Observer o);
	
	public void removeObserver(Observer o);
	
	public void notifyObservers();
}

 
2 일기예보 테마 (테마 인터페이스 구현)
package com.observer;

import java.util.ArrayList;
/**
 * 
 * @author shasha
 *      ---      
 */
public class WeatherData implements Subject {
	
	private ArrayList<Observer> observers;
	private float temperature;
	private float humidity;
	private float pressure;
	
	public WeatherData(){
		observers=new ArrayList<Observer>();
	}

	@Override
	public void notifyObservers() {
		// TODO Auto-generated method stub
		for(int i=0;i<observers.size();i++){
			Observer observer=observers.get(i);
			observer.update(temperature, humidity, pressure);
		}
	}

	@Override
	public void registObserver(Observer o) {
		// TODO Auto-generated method stub
		observers.add(o);
	}

	@Override
	public void removeObserver(Observer o) {
		// TODO Auto-generated method stub
		int i=observers.indexOf(o);
		if(i>=0){
			observers.remove(o);
		}
	}

	
	public void setMeasurements(float temperature,float humidity,float pressure){
		this.temperature=temperature;
		this.humidity=humidity;
		this.pressure=pressure;
		measurementsChanged();
	}
	
	public void measurementsChanged(){
		notifyObservers();
	}
}

 
 3 관찰자 인터페이스
package com.observer;

/**
 * 
 * @author shasha
 *    
 */
public interface Observer {

	public void update(float temp,float humidity,float pressure);
	
}

 
 
4 디 스 플레이 정보 인터페이스
package com.observer;

/***
 * 
 * @author shasha
 *     
 *
 */
public interface DisplayElement {

	public void display();
}

 
 
5. 관찰자 실현 류 - 일기예보 표시 판
package com.observer;
/***
 * 
 * @author duwan
 *        
 */
public class CurrentConditionDisplay implements DisplayElement,Observer{

	private float temperature;
	private float humidity;
	private Subject weatherdate;
	
	public CurrentConditionDisplay(Subject weatherdata){
		this.weatherdate=weatherdata;
		weatherdata.registObserver(this);
	}
	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("temperature: "+temperature+" F degress and"+humidity+"% humidity");
	}

	@Override
	public void update(float temp, float humidity, float pressure) {
		// TODO Auto-generated method stub
		this.temperature=temp;
		this.humidity=humidity;
		display();
	}

}

 6 테스트 프로그램 기상 관측소
package com.observer;

/**
 * 
 * @author shasha
 *        
 */
public class WeatherStation {

	public static void main(String[] args) {
		WeatherData weatherData=new WeatherData();
		CurrentConditionDisplay ccd=new CurrentConditionDisplay(weatherData);
		weatherData.setMeasurements(80, 65, 30.4f);
	}
}

 
 
수요
public void measurementsChanged(){  notifyObservers(); }
setChange () 를 추가 하여 자바 util. Observser 와 같이 일정 상황 이 완료 되 어야 관찰 자 를 알 립 니 다.

좋은 웹페이지 즐겨찾기