// Observer.java
public interface Observer {
void update(float temperature, float pressure, float humidity);
}
//Subject.java
public interface Subject {
void registerObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers();
}
// WeatherData.java
import java.util.ArrayList;
public class WeatherData implements Subject{
private float temperature;
private float pressure;
private float humidity;
// private CurrentConditions currentConditions;
private ArrayList<Observer> observers;
public WeatherData(){
observers = new ArrayList<Observer>();
}
public void dataChange(){
notifyObservers();
}
public void setData(float temperature, float pressure, float humidity){
this.temperature = temperature;
this.pressure = pressure;
this.humidity = humidity;
dataChange();
}
public float getTemperature() {
return temperature;
}
public float getPressure() {
return pressure;
}
public float getHumidity() {
return humidity;
}
public void registerObserver(Observer o) {
observers.add(o);
}
public void removeObserver(Observer o) {
if(observers.contains(o)){
observers.remove(o);
}
}
public void notifyObservers() {
for(Observer ob: observers){
ob.update(this.temperature, this.pressure, this.humidity);
}
}
}
// CurrentConditions.java
public class CurrentConditions implements Observer {
private float temperature;
private float pressure;
private float humidity;
public void update(float temperature, float pressure, float humidity){
this.temperature = temperature;
this.pressure = pressure;
this.humidity = humidity;
display();
}
public void display(){
System.out.println("Temperature Right Now : " + temperature);
System.out.println("Pressure Right Now : " + pressure);
System.out.println("Humidity Right Now : " + humidity);
}
}
// Google.java
public class Google implements Observer {
private float temperature;
private float pressure;
private float humidity;
public void update(float temperature, float pressure, float humidity){
this.temperature = temperature;
this.pressure = pressure;
this.humidity = humidity;
display();
}
public void display(){
System.out.println("Google Temperature Right Now : " + temperature);
System.out.println("Google Pressure Right Now : " + pressure);
System.out.println("Google Humidity Right Now : " + humidity);
}
}
// Client.java
public class Client {
public static void main(String[] args) {
WeatherData weatherData = new WeatherData();
CurrentConditions currentConditions = new CurrentConditions();
Google google = new Google();
weatherData.registerObserver(currentConditions);
weatherData.registerObserver(google);
System.out.println("Notify the observers.");
weatherData.setData(10f, 100f, 30.8f);
}
}
原文:https://www.cnblogs.com/nedrain/p/13204924.html