⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 weatherreport.java

📁 几个设计模式的java源码实例
💻 JAVA
字号:
package WeatherReport;
import java.util.ArrayList;

/*观察者模式:定义了对象之间一对多的依赖,这样一来,
 * 当一个对象状态发生改变时,它的所有依赖者都会收到通知并自动更新
 * 
 * 主题对象有注册,移除,通知观察者三个功能,观察者有一个成员变量保存一个主题的引用
 * */

//原始设计:外界给接口获知气象数据(温度湿度气压等),根据气候数据的变化计时更新几个不同的布告牌,可参看P42的原始设计代码

//新的设计,采用观察者模式,气象数据更新后通知布告牌更新显示
interface Subject{
	public void registerObserver(Observer o);	
	public void removeObserver(Observer o);		
	public void notifyObservers();				//主题改变状态时将通知所有观察者
}

interface Observer{
	public void update(float temp, float humidity, float pressure);	//主题改变状态时,将三个参数传给观察者
}

interface DisplayElement{
	public void display();
}

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 notifyObservers(){
		for(int i=0; i<observers.size(); i++){
			Observer o = (Observer)observers.get(i);
			o.update(temperature, humidity, pressure);
		}
	}
	public void setMeasurements(float temp, float humidity, float pressure){
		this.temperature = temp;
		this.humidity = humidity;
		this.pressure = pressure;
		measurementChanged();
	}
	public void measurementChanged(){	//给外界的接口
		notifyObservers();
	}
}

//其中的一个布告板,显示温度湿度
class CurrentConditionDisplay implements Observer, DisplayElement{
	private float temperature;
	private float humidity;
	private Subject weatherData;
	
	public CurrentConditionDisplay(Subject wd){
		this.weatherData = wd;
		this.weatherData.registerObserver(this);
	}
	public void update(float temp, float humidity, float pressure){
		this.temperature = temp;
		this.humidity = humidity;
		display();
	}
	public void display(){
		System.out.println("当前天气状况:");
		System.out.println("温度:"+this.temperature+"摄氏度, 湿度:"+this.humidity+"%");
	}
} 

//其他的布告板...

public class WeatherReport {

	public static void main(String[] args) {
		WeatherData weatherData = new WeatherData();
		CurrentConditionDisplay ccd = new CurrentConditionDisplay(weatherData);
		weatherData.setMeasurements(20, 10, 30);
		weatherData.setMeasurements(30, 60, 10);
	}
}





Vector<int> ver;
Vector<int>:iterator itr;
i.push_back(1);

ver[0]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -