设计模式之观察者模式demo
生活随笔
收集整理的這篇文章主要介紹了
设计模式之观察者模式demo
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
代碼
public class WeatherData {private float temperature;private float pressure;private float humidity;//聚合private CurrentConditions currentConditions;public WeatherData(CurrentConditions currentConditions) {this.currentConditions = currentConditions;}public float getTemperature() {return temperature;}public float getPressure() {return pressure;}public float getHumidity() {return humidity;}public void dataChange(){currentConditions.update(getTemperature(),getPressure(),getHumidity());}//當數據有更新時候public void setData(float temperature, float pressure, float humidity) {this.temperature = temperature;this.pressure = pressure;this.humidity = humidity;dataChange();} } //顯示當前天氣情況,可以理解成是氣象站自己的網站 public class CurrentConditions {//溫度private float temperature;//氣壓private float pressure;//濕度private float humidity;//更新天氣情況,是由WeatherDate來調用的,使用推送模式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" + temperature);System.out.println("pressure" + pressure);System.out.println("humidity" + humidity);} } public class Client {public static void main(String[] args) {//創建接入方CurrentConditionsCurrentConditions currentConditions = new CurrentConditions();//創建weatherData 并將接入方currentConditions 傳遞到WeatherData中WeatherData weatherData = new WeatherData(currentConditions);//更新天氣情況weatherData.setData(30,150,40);} }?
?
//觀察者接口,有觀察者來實現 public interface Observer {void update(float temperature,float pressure,float humidity); } //觀察者 public class CurrentConditions implements Observer{//溫度private float temperature;//氣壓private float pressure;//濕度private float humidity;public void display(){System.out.println("temperature" + temperature);System.out.println("pressure" + pressure);System.out.println("humidity" + humidity);}@Overridepublic void update(float temperature, float pressure, float humidity) {this.temperature = temperature;this.pressure = pressure;this.humidity = humidity;display();} } public class BaiduSite implements Observer{//溫度private float temperature;//氣壓private float pressure;//濕度private float humidity;public void display(){System.out.println("百度temperature" + temperature);System.out.println("百度pressure" + pressure);System.out.println("百度humidity" + humidity);}@Overridepublic void update(float temperature, float pressure, float humidity) {this.temperature = temperature;this.pressure = pressure;this.humidity = humidity;display();} } public interface Subject {void registerObserver(Observer observer);void removeObserver(Observer observer);void notifyObserver(); }?
public class WeatherData implements Subject{private float temperature;private float pressure;private float humidity;private List<Observer> observerList;public WeatherData() {observerList = new ArrayList<>();}public float getTemperature() {return temperature;}public float getPressure() {return pressure;}public float getHumidity() {return humidity;}public void dataChange(){notifyObserver();}//當數據有更新時候public void setData(float temperature, float pressure, float humidity) {this.temperature = temperature;this.pressure = pressure;this.humidity = humidity;dataChange();}//新增觀察者@Overridepublic void registerObserver(Observer observer) {observerList.add(observer);}//刪除觀察者@Overridepublic void removeObserver(Observer observer) {observerList.remove(observer);}//遍歷所有的觀察者,并通知@Overridepublic void notifyObserver() {observerList.forEach(e->{e.update(temperature,pressure,humidity);});} }?
public class Client {public static void main(String[] args) {//創建一個WeatherDataWeatherData weatherData = new WeatherData();//創建一個觀察者CurrentConditions currentConditions = new CurrentConditions();BaiduSite baiduSite = new BaiduSite();//注冊到weatherDataweatherData.registerObserver(currentConditions);weatherData.registerObserver(baiduSite);weatherData.setData(10,100,30);} }總結
以上是生活随笔為你收集整理的设计模式之观察者模式demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 盒子在页面内居中
- 下一篇: C#-ToString格式化